matlab - 使用 Matlab 读取 HDF5 容器中的单个文件

标签 matlab hdf5

我正在尝试从我之前编写的 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]);

...对于前三个图 block 效果很好,但对于第四个图 block 会抛出错误:

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);

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

最佳答案

再次查看doc h5read。您似乎误解了 startcount 参数。

start 是开始读取数据的位置,count 是读取数据量。当您请求 h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 4]); 时,您要求从第四个图 block 的开头开始([1 1 1 4]),然后读取 4 个完整图 block ([1024 1024 4 4])。由于数据集只有 5 个图 block ,这会给您带来尺寸超出错误。

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

关于matlab - 使用 Matlab 读取 HDF5 容器中的单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137631/

相关文章:

c++ - 需要建议 : does it make sense to include fmt lib in header-only library?

matlab - 如何检查图形是否打开以及如何关闭它?

swift - Swift 中的 DFT 结果与 MATLAB 中的不同

matlab - 动态使用结构

matlab - 获取矩阵中重复次数最多的值的有效方法

python - 管理 HDF5 对象引用

shared-libraries - 安装 netCDF4 时“找不到 hdf5 库”

hdf5 - HDF5 中的 block 大小是多少?

python - 让 HDF5 与 pyTables 一起工作的问题

matlab - 为向量输入定义多变量函数