pythoncreatedhdf5数据集在Matlab中的转换

2024-05-10 17:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些数据在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代码:

^{pr2}$

Tags: 文件数据代码importnumpynp样式数组
3条回答

这是Matlab的HDF5读取器例程中的一个怪癖。(我认为这种行为背后的原因是:二进制文件中的数据是C顺序的,而Matlab数组是Fortran顺序的,所以它们应该将数据报告为转置,而不是重新排序。)

如果使用HDF5工具检查Python创建的文件,则尺寸应为:

$ h5ls test.h5 
mydataset                Dataset {10, 30}

当从MatLab读取数据时,需要对读取的数据的维数进行排列以检索数据布局。为此,使用permute函数。下面的代码给出了任意维数的一般情况

rawdata = h5read(h5Filename,h5Dataset);
ndim = numel(size(rawdata));
data = permute(rawdata,[ndim:-1:1]);

当处理二维数据时,只能转置来自h5read的结果

^{pr2}$

请参阅包含以下语句的Matlab HDF5 documentation

Because HDF5 stores data in row-major order and the MATLAB array is organized in column-major order, you should reverse the ordering of the dimension extents ...

即使在今天,在Mathworks将其代码翻译成C()很久之后,该产品的Fortran起源时不时地露出水面。在

相关问题 更多 >