如何用Python读取小端序编码的物理模拟.raw二进制文件?
读取小端序.raw二进制数据的解决方案
方法一:使用NumPy(推荐,高效简洁)
直接利用numpy.fromfile读取纯二进制数据,指定小端序的单精度浮点数类型,再重塑为目标尺寸:
import numpy as np # 替换为你的.raw文件路径 file_path = "your_data.raw" # 读取小端序单精度浮点数(<表示小端,f4表示4字节单精度) data = np.fromfile(file_path, dtype='<f4') # 重塑为120×60的数组(若维度顺序不符,可尝试(60, 120)) data = data.reshape(120, 60) # 验证数据(可选) print("前3×3数据:") print(data[:3, :3]) print(f"数据均值:{np.mean(data):.6f}")
关键说明:
'<f4'是核心:<指定小端序,f4对应物理模拟常用的4字节单精度浮点数,匹配你提到的数值范围(~9e-4)。fromfile专门处理纯二进制文件,比genfromtxt更适配这类场景,后者更适合带分隔符的文本/二进制格式。
方法二:使用struct模块
修正格式符的错误写法,指定正确的元素数量即可:
import struct file_path = "your_data.raw" total_elements = 120 * 60 # 总数据量 with open(file_path, 'rb') as f: buffer = f.read() # 解析为7200个小端序单精度浮点数 data = struct.unpack(f'<{total_elements}f', buffer) # 转成数组并重塑形状(可选) data = np.array(data).reshape(120, 60) # 查看前5个数值(可选) print("前5个数据:", data[:5])
错误原因解析:
- 你之前用
'float'是无效格式符,struct的浮点数格式符需用'f'(单精度)或'd'(双精度)。 - 用
'<4'会报错是因为这不是合法格式字符串,必须明确指定类型(如f)+ 数量(如7200)。
额外排查项
如果读取后数值仍异常:
- 尝试双精度类型:将dtype改为
'<f8'(小端双精度浮点数),部分模拟软件会输出双精度。 - 调整维度顺序:若数据排列是列优先,将reshape参数改为
(60, 120)。
内容的提问来源于stack exchange,提问作者mgmf46
相关产品推荐
相关产品推荐

