何らかの理由で、hdf5write
MATLAB のメソッドは、行ベクトルを再度読み取ると、行ベクトルを列ベクトルに自動的に変換します。
>> hdf5write('/tmp/data.h5','/data',rand(1,10));
>> size(hdf5read('/tmp/data.h5','/data'))
ans =
10 1
ただし、3 次元の行ベクトルの場合は、問題なく返されます。
>> hdf5write('/tmp/data.h5','/data',rand(1,1,10));
>> size(hdf5read('/tmp/data.h5','/data'))
ans =
1 1 10
hdf5write
行ベクトルに対して正しいことを行うにはどうすればよいですか? 10 x 1 ではなく、1 x 10 として戻ってくるはずです。
編集ではなく、後で実際にデータを読み取るために c ベースの mex を使用しているため、問題は少し複雑ですhdf5read
。さらに、問題は実際には にhdf5write
あり、これは hdf5 ファイル自体に表示されます。
>> hdf5write('/tmp/data.h5','/data',randn(1,10));
>> ! h5ls /tmp/data.h5
data Dataset {10}
つまり、データは 1 次元配列として hdf5 ファイルに保存されます。比較のために、実際の 2 次元行列 (どのように見えるかを示すため)、1 次元列ベクトル、3 次元に沿った 1 次元ベクトルで同じことを試してみます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,1} ではなくデータセット {10} のままです。