2017-02-09 19 views
1

Я пытаюсь прочитать один файл из контейнера 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); 

И как я уже сказал, мой метод работает для первых трех фрагментов, но затем терпит неудачу. Я что-то забыл?

ответ

2

Посмотрите еще doc h5read. Кажется, вы неправильно понимаете параметры start и count.

start, где вы начинаете читать данные, count - сколько данных читать. Когда вы запрашиваете h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 4]);, вы просите начать в начале 4-й плитки ([1 1 1 4]), затем прочитайте 4 полных фрагмента ([1024 1024 4 4]). Поскольку набор данных имеет только 5 плиток, это дает вам размер превышения ошибки.

Чтобы прочитать четвёртой плитка только попробовать h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 1]);

+1

Это было именно то, что было неправильно. Извините и спасибо ... – Honeybear