2013-04-25 6 views
13

Есть ли у кого-нибудь идеи для обновления наборов данных hdf5 от h5py? Предполагая, мы создаем набор данных, как:Обновление h5py Наборы данных

import h5py 
import numpy 
f = h5py.File('myfile.hdf5') 
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4")) 
new_dset_value=numpy.zeros((3,3),"=i4") 

Можно ли продлить DSET в массив 3x3 Numpy?

ответ

14

Вам необходимо создать набор данных с «расширяемым» свойством. Это невозможно изменить после первоначального создания набора данных. Для этого, you need to use the "maxshape" keyword. Значение None в корте для maxshape означает, что это измерение может быть неограниченного размера. Таким образом, если f является HDF5 файла:

dset = f.create_dataset('mydataset', (2,2), maxshape=(None,3)) 

создает набор данных размером (2,2), который может быть продлен на неопределенный срок вдоль первого измерения, и 3 вдоль второй. Теперь вы можете расширить набор данных с resize:

dset.resize((3,3)) 
dset[:,:] = np.zeros((3,3),"=i4") 

Первое измерение может быть увеличена настолько, насколько вам нравится:

dset.resize((10,3)) 
+5

изменение размера также принимает ось аргумент, так что вы должны только указать новый размер для оси, которую вы расширяете, а не для всех из них: dset.resize (10, axis = 0) – velotron

+0

Это очень полезно @velotron, его можно добавить к принятому ответу, потому что для многомерных массивов это проще сделать. – gcucurull

+0

этот пример перезаписывает то, что было ранее в файле? или он просто добавляет новое содержимое? – user798719

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