这是我第一次尝试使用“ .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()的元素
答案 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()
就是这样。 最好的问候。