По какой-то причине метод 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.
edit проблема немного сложнее, потому что я использую mex на основе c для фактического чтения данных позже, вместо этогоhdf5read
.Более того, проблема на самом деле заключается в hdf5write
, и это видно в самих файлах hdf5:
>> hdf5write('/tmp/data.h5','/data',randn(1,10));
>> ! h5ls /tmp/data.h5
data Dataset {10}
, то есть данные сохраняются как одномерный массив вфайл hdf5.Для сравнения я попробую то же самое с реальной 2-мерной матрицей (чтобы показать, как она выглядит), 1-мерным вектором столбца, 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} вместо набора данных {10,1}.