我正在尝试使用 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)
(我还检查并确定对于 v7.3 matlab 文件,octave 与 h5py 具有类似的行为,但是 scipy.io.loadmat
和 Octave 对于较旧版本(>=v7)具有正确的行为.mat 文件。查看错误报告表明他们没有修复此问题或 v7.3 mat 文件的许多其他问题,而且他们根本不正式支持 v7.3)
我的问题是:当从该文件加载这些变量时,h5py 会忽略哪些数据或其他技巧来确定这些变量的类型?第二个问题是,是否有一个读取器的 python 实现可以进行此检查,无论用于做出此决定是什么?
最佳答案
您必须查看属性,可以通过以下方式访问这些属性:
strarr.attrs
在那里您将找到一个名为 MATLAB_class
的属性,它是 char
或 uint16
关于python - .mat v7.3 文件中 char 和 uint16 编码之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36071390/