2013-03-11 92 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