Подтвердить что ты не робот

Как переписать массив внутри h5 файла с помощью h5py

Я пытаюсь перезаписать массив numpy, который является небольшой частью довольно сложного файла h5.

Я извлекаю массив, изменяя некоторые значения, а затем хочу повторно вставить массив в файл h5.

У меня нет проблем с извлечением массива, который вложен.

f1 = h5py.File(file_name,'r')
X1 = f1['meas/frame1/data'].value
f1.close()

Мой сделанный код выглядит примерно так:

f1 = h5py.File(file_name,'r+')
dset = f1.create_dataset('meas/frame1/data', data=X1)
f1.close()

Как проверка работоспособности, я выполнил это в Matlab, используя следующий код, и он работал без проблем.

h5write(file1, '/meas/frame1/data', X1);

Есть ли у кого-нибудь предложения о том, как это сделать успешно?

4b9b3361

Ответ 1

Вы хотите назначить значения, а не создавать набор данных:

f1 = h5py.File(file_name, 'r+')     # open the file
data = f1['meas/frame1/data']       # load the data
data[...] = X1                      # assign new values to data
f1.close()                          # close the file

Чтобы подтвердить, что изменения были правильно сделаны и сохранены:

f1 = h5py.File(file_name, 'r')
np.allclose(f1['meas/frame1/data'].value, X1)
#True

Ответ 2

answerewchan answer описывает способ его выполнения (вы не можете создать набор данных под уже существующим именем, но вы можете, конечно, изменить данные набора данных). Обратите внимание, однако, что набор данных должен иметь ту же форму, что и данные (X1), которые вы пишете на него. Если вы хотите заменить набор данных другим набором данных различной формы, сначала нужно удалить его:

del f1['meas/frame1/data']
dset = f1.create_dataset('meas/frame1/data', data=X1)