我在使用 Python 读取 hdf5 matlab 7.3 文件时遇到麻烦。
我正在使用 h5py 2.0.1。
我可以读取文件中存储的所有矩阵,但无法读取字符串列表。
h5py 将字符串显示为形状 (1, 894)、类型 |04 的数据集。
该数据集包含对象引用,我尝试使用h5file[obj_ref]
syntax.
这会产生类似的结果dataset "FFb": shape (4, 1) type "<u2"
。
我将其解释为长度为四的字符数组。这似乎是字符串的 ASCII 表示形式。
有没有简单的方法可以把绳子取出来?
是否有任何软件包提供 matlab 到 python hdf5 支持?
我假设你的意思是它是 MATLAB 中的字符串元胞数组?此输出看起来很正常:数据集是对象数组(|O4
是 NumPy 对象数据类型)。每个对象都是一个 2 字节整数数组 (<u2
是 NumPy 小端无符号 2 字节整数数据类型)。 h5py 无法知道数据集是字符串元胞数组;它也可以是任意 16 位整数的元胞数组。
获取字符串的最简单方法是使用迭代器,使用 unichr 来转换字符,如下所示:
strlist = [u''.join(unichr(c) for c in h5file[obj_ref]) for obj_ref in dataset])
它的作用是迭代数据集(for obj_ref in dataset
) 创建一个新列表。对于每个对象引用,它取消引用该对象(h5file[obj_ref]
) 获取整数数组。它将每个整数转换为一个字符(unichr(c)
) 并将这些字符连接在一起形成一个 Unicode 字符串 (u''.join()
).
请注意,这会生成一个 unicode 字符串列表。如果您绝对确定每个字符串仅包含 ASCII 字符,则可以替换u''
by ''
and unichr
by chr
.
Caveat:我没有h5py;这篇文章基于我使用 MATLAB 和 NumPy 的经验。您可能需要调整语法或迭代顺序以适合您的数据集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)