使用 h5py 打开 mat 文件并将数据转换为 numpy 矩阵

Opening a mat file using h5py and convert data into a numpy matrix

我有一个 mat 文件,其中包含 2 个包含不同大小矩阵的不同单元格。我需要使用 h5py 将该数据转换为一个 numpy 数组进行实验(我是 h5py 的新手。我认为它和解释的一样简单 here

读取文件效果很好,将数据放入 numpy 数组中也效果很好,但我需要每个单元格内每个矩阵内每个位置的值表示,考虑到当我打印时 [=10] =],我只收到对 array(< HDF5 object reference>, dtype=object) 的引用,我需要其中的值...

在 matlab 中将单元格转换为 3d 矩阵看起来非常诱人,但是除了读取数据和进行计算(不保存任何内容)之外,我不认为 root 权限可以在 Matlab 中做任何事情。

如果有人已经做过这方面的工作,或者有人对如何获取这些数据有任何想法,我愿意听取您的建议。

您必须按如下方式调用元素:

np.array(x)[0, 1]

寻找 matlabh5py 我找到

read matlab v7.3 file into python list of numpy arrays via h5py (2014)

(2015)

How to read a v7.3 mat file via h5py? (2013)

MATLAB 结构和单元不直接映射到 h5numpy 类。所以有一种将它们嵌入 object 数组的趋势。使用 scipy.io.loadmat 读取旧的 .mat 文件时也会出现此问题。要从 dtype=object 数组中提取元素,您需要使用进一步的索引,这对于 0d 数组可能有点棘手。

让我举例说明

In [603]: a = np.arange(4)

创建一个包含 1 个项目的一维数组,然后插入 a

In [604]: b = np.array([None], dtype=object)
In [605]: b[0] = a

In [606]: b
Out[606]: array([array([0, 1, 2, 3])], dtype=object)

使用索引检索 aitem:

In [607]: b[0]
Out[607]: array([0, 1, 2, 3])

In [608]: b.item()
Out[608]: array([0, 1, 2, 3])

但如果它是一个 0d numpy 数组:

In [618]: c=np.array(None)    
In [619]: c
Out[619]: array(None, dtype=object)
In [620]: c[()]=a

In [621]: c
Out[621]: array(array([0, 1, 2, 3]), dtype=object)

In [622]: c.item()
Out[622]: array([0, 1, 2, 3])

In [623]: c[()]
Out[623]: array([0, 1, 2, 3])

在这种情况下,您必须使用空元组进行索引,()