2013-03-11 161 views
3

我必须将所有大数据放在一起放入hdf5中的单个数据集中。现在,问题是,如果你尝试:在matlab中将数据追加到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环境中连接数据。当然,这对于小数据来说不是问题。对于这种情况,我们正在谈论千兆字节的数据,而Matlab开始喊出内存不足。

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

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

回答

1

我相信'追加'模式是将数据集添加到现有的文件。

hdf5write似乎不支持附加到现有数据集。如果没有新的h5write函数,最好的办法就是编写一个带有H5 *包函数的低级HDF5库函数的小实用程序。

为了让你开始,doc页面有一个关于如何附加到数据集的例子。

2

你不能用hdf5write这样做,但是如果你的Matlab版本不太旧,你可以用h5createh5write来完成。此示例来自doc of h5write

将数据追加到无限数据集。

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来做到这一点。

+0

这对那些有较新版本Matlab的人有帮助,但对于我们来说,我们在我们的问题中已经写过,我们没有h5write函数。 – Karl 2013-03-12 00:42:21