在python和matlab中将float二进制文件读入2D数组

时间:2017-06-02 18:58:39

标签: python arrays matlab numpy binary

我有一些二进制输入文件(扩展名“.bin”),用于描述海洋深度的2D场,它们都是负浮点数。我已经能够在matlab中加载它们如下:

f = fopen(filename,'r','b');
data = reshape(fread(f,'float32'),[128 64]);

这个matlab代码给出了0到-5200之间的双倍值。但是,当我在Python中尝试相同时,我奇怪地得到0到1e-37之间的值。 Python代码是:

f = open(filename, 'rb')
data = np.fromfile(f, np.float32)
data.shape = (64,128)

奇怪的是,在两种情况下,在(64,128)数组的正确位置显示的掩码值为0。它似乎只是numpy.float32值的大小和符号。

我在Python代码中做错了什么?

2 个答案:

答案 0 :(得分:3)

numpy.fromfile并非平台独立,尤其是"字节顺序"在文档中提到:

  

不要依赖tofilefromfile的组合来进行数据存储,因为生成的二进制文件不是独立于平台的。特别是,不保存字节顺序或数据类型信息。

你可以尝试:

data = np.fromfile(f, '>f4')  # big-endian float32

data = np.fromfile(f, '<f4')  # little-endian float32

并检查哪一个(big endian或little endian)给出正确的值。

答案 1 :(得分:0)

基于你的matlab fopen,文件是big endian('b')。但是你的python代码不会处理字节序。