使用 Matlab 读取 HDF5 容器中的单个文件
Read a single file in HDF5 container with Matlab
我正在尝试从我之前编写的 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);
正如我所说,我的方法适用于前三个图块,但后来失败了。我是不是忽略了什么?
再看一遍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 个图块,这会给您带来超出尺寸的错误。
要阅读第 4 个图块,请尝试 h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 1]);
我正在尝试从我之前编写的 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 容器与我在
1024x1024x4x5
) 一样大
info = h5info(filename, datasetname);
dataSize = info.Dataspace.Size;
HDF5 容器没问题。读取所有文件然后在 Matlab 中访问 BLOB 之前工作正常。
data = h5read(filename, datasetname);
file = data(:,:,:,fileIndex);
正如我所说,我的方法适用于前三个图块,但后来失败了。我是不是忽略了什么?
再看一遍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 个图块,这会给您带来超出尺寸的错误。
要阅读第 4 个图块,请尝试 h5read('myfile.h5', '/data', [1 1 1 4] , [1024 1024 4 1]);