使用 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]
寻找 matlab
和 h5py
我找到
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 结构和单元不直接映射到 h5
或 numpy
类。所以有一种将它们嵌入 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)
使用索引检索 a
或 item
:
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])
在这种情况下,您必须使用空元组进行索引,()
。
我有一个 mat 文件,其中包含 2 个包含不同大小矩阵的不同单元格。我需要使用 h5py 将该数据转换为一个 numpy 数组进行实验(我是 h5py 的新手。我认为它和解释的一样简单 here
读取文件效果很好,将数据放入 numpy 数组中也效果很好,但我需要每个单元格内每个矩阵内每个位置的值表示,考虑到当我打印时 [=10] =],我只收到对 array(< HDF5 object reference>, dtype=object)
的引用,我需要其中的值...
在 matlab 中将单元格转换为 3d 矩阵看起来非常诱人,但是除了读取数据和进行计算(不保存任何内容)之外,我不认为 root 权限可以在 Matlab 中做任何事情。
如果有人已经做过这方面的工作,或者有人对如何获取这些数据有任何想法,我愿意听取您的建议。
您必须按如下方式调用元素:
np.array(x)[0, 1]
寻找 matlab
和 h5py
我找到
read matlab v7.3 file into python list of numpy arrays via h5py (2014)
How to read a v7.3 mat file via h5py? (2013)
MATLAB 结构和单元不直接映射到 h5
或 numpy
类。所以有一种将它们嵌入 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)
使用索引检索 a
或 item
:
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])
在这种情况下,您必须使用空元组进行索引,()
。