我有一些我在Python和Matlab之间共享的数据。我以前是通过在MATLAB风格的.mat文件中保存NumPy数组来实现的,但是想切换到HDF5数据集。但是,我注意到一个有趣的特性:当我将NumPy数组保存在HDF5文件中时(使用h5py)然后在Matlab中读取它(使用h5read),它最终会被转置。有什么我想念的吗?
Python代码:
import numpy as np
import h5py
mystuff = np.random.rand(10,30)
f = h5py.File('/home/user/test.h5', 'w')
f['mydataset'] = mystuff
f.close()
Matlab代码:
mystuff = h5read('/home/user/test.h5', '/mydataset');
size(mystuff) % 30 by 10
答案 0 :(得分:7)
请参阅包含声明的Matlab HDF5 documentation:
因为HDF5以行主要顺序存储数据而MATLAB数组是 按列主要顺序组织,你应该颠倒它的顺序 维度范围......
即使在今天,在Mathworks将代码转换为C( etc )之后很久,产品的Fortran起源时不时地浮出水面。
答案 1 :(得分:7)
这是Matlab的HDF5阅读器例程中的一个怪癖。 (我认为这种行为背后的原因是:数据在二进制文件中是C顺序,而Matlab数组是以Fortran顺序排列的,所以他们应该将数据报告为转置而不是重新排序。)
如果您使用HDF5工具检查Python创建的文件,则尺寸应该是它们应该是:
$ h5ls test.h5 mydataset Dataset {10, 30}
答案 2 :(得分:1)