2017-02-09 32 views
1

我正在嘗試從我之前編寫的HDF5容器中讀取單個文件。我雖然這很簡單:從文件大小和文件索引中獲取索引並讀取HDF5文件的相應部分。用Matlab讀取HDF5容器中的單個文件

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容器與那些文件(1024x1024x4x5)中的5個一樣大,我正在使用

info = h5info(filename, datasetname); 
dataSize = info.Dataspace.Size; 

HDF5容器是好的。讀取所有文件,然後在Matlab中訪問BLOB,然後再正常工作。

data = h5read(filename, datasetname); 
file = data(:,:,:,fileIndex); 

正如我所說,我的方法適用於前三個瓷磚,但然後失敗。我在這裏忽略了什麼嗎?

回答

2

再看看doc h5read。你似乎誤解了startcount參數。

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