Python与Matlab写入二进制文件时矩阵类数据结果不一致问题
差异原因
- Matlab的多维数组默认采用*列优先(Fortran顺序)*存储,调用
fwrite写入二进制文件时,会按列遍历矩阵元素:你示例中的2×2矩阵[[1 2];[3 4]],实际写入顺序为1、3、2、4。 - NumPy的多维数组默认采用*行优先(C顺序)*存储,直接写入时会按行遍历元素:示例矩阵的默认写入顺序为
1、2、3、4,这就是两类代码生成的二进制文件不一致的核心原因。
解决方法
你可以选择以下任意一种方式调整Python代码,就能得到和Matlab完全一致的二进制文件:
- 声明数组时指定列优先存储顺序
import numpy as np with open("test2.txt", "wb") as fid: # order='F' 指定数组按Fortran(列优先)顺序存储 a = np.array([[1, 2], [3, 4]], order='F') fid.write(a.astype("float64"))
- 写入前对数组做转置处理
转置后按行优先写入的效果,和原数组按列优先写入完全等价:
import numpy as np with open("test2.txt", "wb") as fid: a = np.array([[1, 2], [3, 4]]) # 先转置再写入 fid.write(a.T.astype("float64"))
内容的提问来源于stack exchange,提问作者L.Clarkson
相关产品推荐
相关产品推荐

