2013-03-11 2 views
3

Мне нужно собрать все огромные данные в один набор данных в hdf5. Теперь то, что если вы попробуете:Добавление данных к одному набору данных в hdf5 в matlab

>> 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 начинает выкрикивать из памяти.

Из-за этого, какие у меня варианты в этом случае?

Примечание: у нас нет функции h5write в нашей версии matlab.

ответ

1

Я считаю, что режим 'append' должен добавить наборы данных к существующему файлу.

hdf5write, похоже, не поддерживает добавление существующих наборов данных. Без новой функции h5write лучшим вариантом было бы написать небольшую утилиту с низкоуровневыми библиотечными функциями HDF5, которые будут отображаться с помощью функций пакета H5 *.

Чтобы начать работу, на странице doc есть пример того, как добавить к набору данных.

2

Вы не можете сделать это с hdf5write, однако если ваша версия Matlab не слишком стар, вы можете сделать это с помощью h5create и h5write. Этот пример взят из 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

Смежные вопросы