Обновление наборов данных h5py

У кого-нибудь есть идеи по обновлению наборов данных hdf5 из 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?


person George Monet    schedule 25.04.2013    source источник


Ответы (1)


Вам нужно создать набор данных с «расширяемым» свойством. Это невозможно изменить после первоначального создания набора данных. Для этого нужно использовать ключевое слово "maxshape". Значение 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))
person Yossarian    schedule 25.04.2013
comment
resize также принимает аргумент оси, поэтому вам нужно указать новый размер только для оси, которую вы расширяете, а не для всех: dset.resize(10, axis=0) - person Joseph Sheedy; 11.11.2015
comment
Это очень полезно @velotron, его можно добавить к принятому ответу, потому что для многомерных массивов это проще сделать. - person Guillem Cucurull; 12.05.2016
comment
перезаписывает ли этот пример то, что было ранее в файле? или он просто добавляет новое содержимое? - person user798719; 14.05.2017
comment
Вы «добавляете» текущие данные при увеличении или уменьшении размера. Индексы данных не изменяются при изменении размера набора данных. docs.h5py.org/en/latest/faq.html - person Aquiles Carattino; 12.03.2018