hen*_*ake 5 python arrays binary matlab numpy
我有一些二进制输入文件(扩展名“.bin”),它们描述了海洋深度的二维字段,它们都是负浮点数。我已经能够在 matlab 中加载它们,如下所示:
f = fopen(filename,'r','b');
data = reshape(fread(f,'float32'),[128 64]);
Run Code Online (Sandbox Code Playgroud)
这个 matlab 代码给了我 0 到 -5200 之间的双值。但是,当我尝试在 Python 中执行相同操作时,我奇怪地得到介于 0 和 1e-37 之间的值。Python代码是:
f = open(filename, 'rb')
data = np.fromfile(f, np.float32)
data.shape = (64,128)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在这两种情况下,土地的掩码值为 0,它显示在 (64,128) 数组中的正确位置。它似乎只是numpy.float32关闭值的大小和符号。
我在 Python 代码中做错了什么?
numpy.fromfile 不是平台独立的,尤其是文档中提到的“字节顺序”:
不要依赖的组合
tofile和fromfile数据存储,生成的二进制文件是不是独立于平台。特别是,不保存字节顺序或数据类型信息。
你可以试试:
data = np.fromfile(f, '>f4') # big-endian float32
Run Code Online (Sandbox Code Playgroud)
和:
data = np.fromfile(f, '<f4') # little-endian float32
Run Code Online (Sandbox Code Playgroud)
并检查哪一个(大端或小端)给出了正确的值。