Я пытаюсь прочитать один файл из контейнера HDF5, который я ранее писал. Хотя это прямолинейно: выведите индекс из файлов и fileindex и прочитайте соответствующую часть файла HDF5.Прочтите один файл в контейнере HDF5 с помощью Matlab
file = h5read(filename, datasetname, ...
[ones(1, length(dataSize)-1) fileIdx], [dataSize(1:end-1) fileIdx]);
Это приводит к h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 4]);
в следующем примере:
% info for myfile.h5
h5disp('myfile.h5');
% HDF5 myfile.h5.h5
% Group '/'
% Dataset 'data'
% Size: 1024x1024x4x5
% MaxSize: 1024x1024x4x5
% Datatype: H5T_IEEE_F64LE (double)
% ChunkSize: 1024x1024x4x1
% Filters: deflate(1)
% FillValue: 0.000000
% read in myfile.h5:
h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 4]);
... и отлично работает в течение первых трех плиток, но выдает ошибку для четвертой плитки:
Error using h5readc
The index arguments exceed the size of the dataset.
Error in h5read (line 58)
[data,var_class] = h5readc(Filename,Dataset,start,count,stride);
...
Однако предыдущий h5disp('myfile.h5');
указывает, что контейнер HDF5 имеет 5 таких файлов (1024x1024x4x5
), которые я использую с
info = h5info(filename, datasetname);
dataSize = info.Dataspace.Size;
HDF5 контейнер в порядке. Чтение всех файлов, а затем доступ к BLOB в Matlab, прежде чем работал нормально.
data = h5read(filename, datasetname);
file = data(:,:,:,fileIndex);
И как я уже сказал, мой метод работает для первых трех фрагментов, но затем терпит неудачу. Я что-то забыл?
Это было именно то, что было неправильно. Извините и спасибо ... – Honeybear