将hdf5 matlab字符串加载到Python中

And*_*ler 6 python matlab hdf5

我在使用Python读取hdf5 matlab 7.3文件时遇到了麻烦.我正在使用h5py 2.0.1.

我可以读取存储在文件中的所有矩阵,但我无法读取字符串列表.h5py将字符串显示为形状(1,894)的数据集,其类型为| 04.此数据集包含对象引用,我尝试使用h5file[obj_ref]语法取消引用.

这会产生类似的结果dataset "FFb": shape (4, 1) type "<u2".我将其解释为长度为4的字符数组.这似乎是字符串的ASCII表示.

是否有一种简单的方法可以解决问题?

是否有任何包提供matlab到python hdf5支持?

nne*_*neo 8

我假设你的意思是它是MATLAB中的字符串单元格数组?此输出看起来很正常:数据集是一个对象数组(|O4是NumPy对象数据类型).每个对象都是一个2字节整数的数组(<u2是NumPy little-endian无符号2字节整数数据类型).h5py无法知道数据集是字符串的单元格数组; 它也可以是任意16位整数的单元阵列.

获取字符串的最简单方法是使用使用unichr的迭代器来转换字符,如下所示:

strlist = [u''.join(unichr(c) for c in h5file[obj_ref]) for obj_ref in dataset])
Run Code Online (Sandbox Code Playgroud)

这样做是迭代数据集(for obj_ref in dataset)以创建新列表.对于每个对象引用,它取消引用object(h5file[obj_ref])以获取整数数组.它将每个整数转换为一个字符(unichr(c)),并将这些字符一起连接成一个Unicode字符串(u''.join()).

请注意,这会生成一个unicode字符串列表.如果您完全确定每个字符串仅包含ASCII字符,则可以替换为u''by ''unichrby chr.

警告:我没有h5py; 这篇文章是基于我对MATLAB和NumPy的经验.您可能需要调整语法或迭代顺序以适应数据集.