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

时间:2019-07-12 20:38:36

标签: 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]时,输出将是f.key()的名称,但是我需要f.key()的元素

2 个答案:

答案 0 :(得分:0)

正如@hpaulj所评论的那样,您需要确定哪些对象是组,哪些是数据集。对于Matlab数据集,您需要确定哪些是数组,哪些是对象(对象指向文件中的其他HDF5对象)。直到您对HDF5和h5py满意为止,最简单的方法是使用HDF集团的 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()

答案 1 :(得分:-1)

此示例以hdf5格式保存并加载一个文件:

保存一个数组的特征或元素:

h5f_data = h5py.File('output_folder/data.h5', 'w')
h5f_data.create_dataset('elements_1', data=np.array(myarray))
h5f_data.close()

然后加载文件以获取数组的元素:

h5f_data = h5py.File('output_folder/data.h5', 'r')
myarray = h5f_data['elements_1']
myarray = np.array(myarray)
h5f_data.close()

就是这样。 最好的问候。