【问题标题】:Read a single file in HDF5 container with Matlab使用 Matlab 读取 HDF5 容器中的单个文件
【发布时间】: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);

正如我所说,我的方法适用于前三个图块,但随后失败。我在这里忽略了什么吗?

【问题讨论】:

    标签: matlab hdf5


    【解决方案1】:

    再次查看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 个图块,这会给您带来超出尺寸的错误。

    要阅读第 4 个图块,请尝试 h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 1]);

    【讨论】:

      猜你喜欢
      • 2017-04-23
      • 2017-06-26
      • 2014-05-18
      • 2014-12-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2019-06-15
      • 2017-06-19
      相关资源
      最近更新 更多