.mat v7.3 文件中 char 和 uint16 编码的区别
Differences between encoding of char and uint16 in .mat v7.3 files
我正在尝试使用 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 与 v7.3 matlab 文件的 h5py 具有相似的行为,但是 scipy.io.loadmat
和 octave 对于旧的 >=v7 .mat 文件都有正确的行为。看通过错误报告表明他们没有修复 v7.3 mat 文件的这个问题或其他一些问题,而且他们根本不正式支持 v7.3)
我的问题是:h5py 忽略了哪些数据或其他技巧,matlab 在从该文件加载这些变量时使用它们来确定这些变量的类型?第二个问题是,是否有 python 实现的 reader 可以使此检查用于做出此决定的任何内容?
你得看看属性,可以通过以下方式访问:
strarr.attrs
在那里你会找到一个名为 MATLAB_class
的属性,它是 char
或 uint16
我正在尝试使用 h5py
.
我遇到了字符数组(例如,通常包含单个字符串的 .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 与 v7.3 matlab 文件的 h5py 具有相似的行为,但是 scipy.io.loadmat
和 octave 对于旧的 >=v7 .mat 文件都有正确的行为。看通过错误报告表明他们没有修复 v7.3 mat 文件的这个问题或其他一些问题,而且他们根本不正式支持 v7.3)
我的问题是:h5py 忽略了哪些数据或其他技巧,matlab 在从该文件加载这些变量时使用它们来确定这些变量的类型?第二个问题是,是否有 python 实现的 reader 可以使此检查用于做出此决定的任何内容?
你得看看属性,可以通过以下方式访问:
strarr.attrs
在那里你会找到一个名为 MATLAB_class
的属性,它是 char
或 uint16