【问题标题】:Opening a mat file using h5py and convert data into a numpy matrix使用 h5py 打开 mat 文件并将数据转换为 numpy 矩阵
【发布时间】:2016-09-15 00:29:35
【问题描述】:

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

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

在 matlab 中将单元格转换为 3d 矩阵看起来很诱人,但是除了读取数据和进行计算(不保存任何内容)之外,我不计入 root 权限在 Matlab 中执行任何操作。

如果有人已经对此进行了研究,或者有人对如何获取这些数据有任何想法,我愿意听取您的建议。

【问题讨论】:

    标签: python matlab numpy cell-array h5py


    【解决方案1】:

    寻找matlabh5py我找到了

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

    Reading a Matlab's cell array saved as a v7.3 .mat file with H5py (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])
    

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

    【讨论】:

      【解决方案2】:

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

      np.array(x)[0, 1]
      

      【讨论】:

        猜你喜欢
        • 2015-06-11
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多