使用Python的h5py读取.mat文件中的所有变量

3
我正在尝试从一个'.mat' v7.3文件中提取所有变量,并将它们转换为NumPy数组。有没有一种通用的方法,最好不需要指定变量名称?如何从h5py.File获取所有存在的变量名,然后检查它们的维度?
例如:
 import numpy as np, h5py

 file = h5py.File('data.mat','r')
 for "all variables in mat file"
     ...fill numpy array
 end

1
你在交互式会话中探索过这个文件吗? h5py 自文档化,允许你查找组和数据集的 keys,并对其进行迭代。换句话说,作为开始,把这个文件当作任何其他未知的 h5 文件来处理。 - hpaulj
通过h5py读取v7.3的先前问题http://stackoverflow.com/questions/27670149/read-matlab-v7-3-file-into-python-list-of-numpy-arrays-via-h5pyhttps://dev59.com/jWIk5IYBdhLWcg3waNZr#27699851 - hpaulj
1个回答

8
在查看了一些评论以及H5PY组的文档后,我发现您可以遍历所有的H5PY“项”来获取与每个变量名相关联的值。下面是一个示例。如果有更好的方法来获取变量名和值,请发布评论。
注意:该示例仅提取包含数字数组(h5py.Dataset)的变量的值。如果您有嵌套组或单元格数组,则需要进一步访问它们以获取值。
import numpy as np
import h5py

f = h5py.File('simdata_020_01.mat','r')
variables = f.items()

for var in variables:
    name = var[0]
    data = var[1]
    print "Name ", name  # Name
    if type(data) is h5py.Dataset:
        # If DataSet pull the associated Data
        # If not a dataset, you may need to access the element sub-items
        value = data.value
        print "Value", value  # NumPy Array / Value

4
你可以直接使用 for name, data in f.items():,而不用涉及到整个 variablesvar[0] 的内容。 - LucasB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接