【发布时间】:2017-06-27 12:25:26
【问题描述】:
我正在尝试从我之前编写的 HDF5 容器中读取单个文件。我虽然这很简单:从文件大小和文件索引导出索引并读取 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 容器与我正在使用的那些文件中的 5 个 (1024x1024x4x5) 一样大
info = h5info(filename, datasetname);
dataSize = info.Dataspace.Size;
HDF5 容器很好。读取所有文件,然后在 Matlab 中访问 BLOB 之前工作正常。
data = h5read(filename, datasetname);
file = data(:,:,:,fileIndex);
正如我所说,我的方法适用于前三个图块,但随后失败。我在这里忽略了什么吗?
【问题讨论】: