我正在尝试使用h5py
在python文件中阅读v7.3 matlab .mat。
我遇到的问题是字符数组(例如,通常包含单个字符串的.mat字段)和uint16数组的表示看起来相同。
>> ushortarr = uint16([63 109 105 102])
>> strarr = 'gibl'
>> save('short_string_difference.mat', 'ushortarr', 'strarr', '-v7.3')
当加载回matlab时,matlab能够检测到这些变量的正确数据类型:
>> ss73 = load('short_string_difference.mat')
ss73 =
strarr: 'gibl'
ushortarr: [69 109 105 102]
但是h5py表明该文件的结构如下:
(Pdb) strarr
<HDF5 dataset "strarr": shape (4, 1), type "<u2">
(Pdb) ushortarr
<HDF5 dataset "ushortarr": shape (4, 1), type "<u2">
(Pdb) strarr.value
array([[103],
[105],
[ 98],
[108]], dtype=uint16)
(Pdb) ushortarr.value
array([[ 69],
[109],
[105],
[102]], dtype=uint16)
(我还检查并确定octave与v5.3 matlab文件的h5py具有相似的行为,但scipy.io.loadmat
和octave对旧的&gt; = v7 .mat文件都有正确的行为。错误报告表明他们没有解决这个或v7.3 mat文件的其他一些问题,并且他们根本没有正式支持v7.3)
我的问题是:h5py忽略的数据或其他技巧是matlab用来确定这些变量从这个文件加载时的类型?第二个问题是,是否有一个读者的python实现可以检查用于做出此决定的任何内容?
答案 0 :(得分:2)
您必须查看属性,可以通过以下方式访问:
strarr.attrs
在那里,您会找到一个名为MATLAB_class
的属性char
或uint16