在Matlab中将数据追加到同一HDF5数据集中

3

我需要将所有大数据整合到一个HDF5数据集中。现在,问题是,如果你尝试:

>> hdf5write('hd', '/dataset1', [1;2;3])
>> hdf5write('hd', '/dataset1', [4;5;6], 'WriteMode', 'append')
??? Error using ==> hdf5writec
writeH5Dset: Dataset names must be unique when appending data.

如您所见,当您试图向同一数据集追加数据时,hdf5write会抱怨。我查看了一下,发现一个可能的解决方法是先从数据集中获取数据,然后在Matlab环境中拼接数据。当然,对于小数据来说这不是问题。但对于本例而言,我们讨论的是几GB的数据,而Matlab开始报告内存不足。

因此,在这种情况下,我的可用选项是什么?

注意:我们的Matlab版本中没有h5write函数。

2个回答

3
我认为“append”模式是将数据集添加到现有文件中。
hdf5write似乎不支持追加到现有数据集。如果没有较新的h5write函数,您最好使用公开的H5 *包函数暴露出来的低级HDF5库函数编写一个小型实用程序。
为了帮助您入门,文档页面上有一个关于如何追加到数据集的示例。

3
您无法使用hdf5write完成此操作,但是如果您的Matlab版本不太旧,则可以使用h5create h5write 进行操作。以下示例摘自 h5write 的文档

Append data to an unlimited data set.

h5create('myfile.h5','/DS3',[20 Inf],'ChunkSize',[5 5]);
for j = 1:10
    data = j*ones(20,1);
    start = [1 j];
    count = [20 1];
    h5write('myfile.h5','/DS3',data,start,count);
end
h5disp('myfile.h5');
对于旧版本的Matlab,可以使用Matlab的HDF5低级API来完成此操作。

这对于那些使用较新版本的Matlab的人会有帮助,但是对于我们而言,我们在问题中已经说明我们没有h5write函数。 - Karl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接