出于某种原因,hdf5write
当我重新读取行向量时,MATLAB 中的方法会自动将它们转换为列向量:
>> hdf5write('/tmp/data.h5','/data',rand(1,10));
>> size(hdf5read('/tmp/data.h5','/data'))
ans =
10 1
但是,对于第三维的行向量,它会很好地返回:
>> hdf5write('/tmp/data.h5','/data',rand(1,1,10));
>> size(hdf5read('/tmp/data.h5','/data'))
ans =
1 1 10
我怎样才能hdf5write
为行向量做正确的事情?它们应该以 1 x 10 而不是 10 x 1 的形式返回。
编辑问题稍微复杂一些,因为我使用基于 c 的 mex 稍后实际读取数据,而不是hdf5read
. 此外,问题确实出在 中hdf5write
,这在 hdf5 文件本身中可见:
>> hdf5write('/tmp/data.h5','/data',randn(1,10));
>> ! h5ls /tmp/data.h5
data Dataset {10}
即数据以一维数组的形式保存在 hdf5 文件中。为了比较,我用一个实际的二维矩阵(以显示它的样子)、一个一维列向量、一个沿第三维的一维向量尝试同样的事情,并且,为了踢球,试试这个V71Dimensions
技巧对hdf5read
和都有帮助hdf5write
:
>> hdf5write('/tmp/data.h5','/data',randn(10,1)); %1-d col vector
>> ! h5ls /tmp/data.h5
data Dataset {10}
>> hdf5write('/tmp/data.h5','/data',randn(1,1,10)); %1-d vector along 3rd dim; annoying
>> ! h5ls /tmp/data.h5
data Dataset {10, 1, 1}
>> hdf5write('/tmp/data.h5','/data',randn(2,5)); %2-d matrix. notice the reversal in dim order
>> ! h5ls /tmp/data.h5
data Dataset {5, 2}
>> hdf5write('/tmp/data.h5','/data',randn(1,10),'V71Dimensions',true); %1-d row; option does not help
>> ! h5ls /tmp/data.h5
data Dataset {10}
所以,问题似乎出在hdf5write
. 该'V71Dimensions'
标志没有帮助:生成的 hdf5 文件仍然是数据集 {10} 而不是数据集 {10,1}。