Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中显示.mat文件中的数组元素_Python_Matlab_Numpy_H5py - Fatal编程技术网

如何在python中显示.mat文件中的数组元素

如何在python中显示.mat文件中的数组元素,python,matlab,numpy,h5py,Python,Matlab,Numpy,H5py,这是我第一次尝试使用“.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]时,输

这是我第一次尝试使用“.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()的元素作为注释,您需要确定哪些对象是组,哪些是数据集。对于Matlab数据集,您需要确定哪些是数组,哪些是对象(对象指向文件中的其他HDF5对象)。在您熟悉HDF5和h5py之前,最简单的方法是使用HDF组中的HDFView实用程序

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

if isinstance(node, h5py.Group):
if isinstance(node, h5py.Dataset):
if (node.dtype == 'object') :
要测试变量
节点
是否为数据集,请使用:

if isinstance(node, h5py.Group):
if isinstance(node, h5py.Dataset):
if (node.dtype == 'object') :
要测试变量
节点
是否为对象数据集,请使用:

if isinstance(node, h5py.Group):
if isinstance(node, h5py.Dataset):
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()

如果你
打印f[i]
,你会得到什么?@mkrieger1我发现了一个关于Matlab v7.3文件的老SO主题:它解释了Matlab如何使用“对象引用”将数据保存在复杂的结构中。阅读答案(以及其中的链接),寻求帮助。使用对象并不简单。我在SVHN数据集上回答了一个类似的SO主题:。它有解释每个h5py调用的分步说明。看起来
f[i]
。您需要查看这些组的元素(它们的
),并继续深入挖掘,直到获得
数据集
<代码>数据集可以作为
numpy
数组加载。我建议阅读
h5py
文档,尤其是关于组和数据集的部分。