【问题标题】:how to display elements of arrays in a .mat file in python如何在python的.mat文件中显示数组元素
【发布时间】:2019-11-22 14:57:20
【问题描述】:

这是我第一次尝试使用“.mat”文件。我将使用“.mat”文件的数据,但无法打开数组的元素。谁能帮我?由于“*.mat”文件 > 7.3,我不能使用 Scipy.io

 import numpy as np
 import h5py

 f = h5py.File('data.mat')
 for i in f.keys():
    aa = f[i]
    aa=np.array(aa)
    print i,':','\n',aa

当我使用 aa=np.array(aa)[0] 时,输出将是 f.key() 的名称,但我需要 f.key() 的元素

【问题讨论】:

  • print f[i] 会得到什么?
  • @mkrieger1
  • 我发现了一个关于 Matlab v7.3 文件的旧 SO 主题:how-to-read-a-v7-3-mat-file-via-h5py 它解释了 Matlab 如何使用“对象引用”将数据保存在复杂结构中。阅读该答案(及其中的链接)以寻求帮助。处理对象并不简单。我在这里回答了关于 SVHN 数据集的类似 SO 主题:what-is-the-difference-between-the-two-ways-of-accessing-the-hdf5-group-in-svhn。它包含解释每个 h5py 调用的分步说明。
  • 看起来f[i]groups。你需要查看这些组的元素(他们的keys),并继续挖掘直到你得到datasetsdatasets 可以加载为 numpy 数组。我建议阅读h5py 文档,尤其是关于组和数据集的部分。

标签: python matlab numpy h5py


【解决方案1】:

正如@hpaulj 所评论的,您需要确定哪些对象是组,哪些是数据集。对于 Matlab 数据集,您需要确定哪些是数组,哪些是对象(对象指向文件中的其他 HDF5 对象)。在您熟悉 HDF5 和 h5py 之前,最简单的方法是使用 HDF Group 的 HDFView 实用程序。

当您准备好编写代码时,您可以务实地使用 isinstance() 引用 h5py 对象。
要测试变量 node 是否为 Group,请使用:

if isinstance(node, h5py.Group):

要测试变量node 是否为数据集,请使用:

if isinstance(node, h5py.Dataset):

要测试变量node 是否是对象数据集,请使用:

if (node.dtype == 'object') :

您可以使用visititems(-function-) 递归地向下循环对象树,对每个对象调用-function-

这是一个非常简单的示例来演示。将您的文件名放在foo.hdf5 的位置并运行。警告:如果您有很多组和数据集,这会产生大量输出。了解文件架构后,您应该能够访问数据集。如果您找到对象数据集,请阅读我的链接答案以取消引用它们。

import numpy as np
import h5py

def visitor_func(name, node):
    if isinstance(node, h5py.Group):
        print(node.name, 'is a Group')
    elif isinstance(node, h5py.Dataset):
       if (node.dtype == 'object') :
            print (node.name, 'is an object Dataset')
       else:
            print(node.name, 'is a Dataset')   
    else:
        print(node.name, 'is an unknown type')         
#########    

print ('testing hdf5 matlab file')
h5f = h5py.File('foo.hdf5')

h5f.visititems(visitor_func)   

h5f.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多