如何在python中显示.mat文件中的数组元素
这是我第一次尝试使用“.mat”文件。我将使用“.mat”文件的数据,但数组的元素无法打开。有人能帮我吗?由于“*.mat”文件大于7.3,因此无法使用Scipy.io如何在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]时,输
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
文档,尤其是关于组和数据集的部分。