如何使用h5py覆盖h5文件中的数组

时间:2014-04-07 20:36:14

标签: python arrays numpy 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);

有没有人对如何成功地提出任何建议?

2 个答案:

答案 0 :(得分:25)

您想要分配值,而不是创建数据集:

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

答案 1 :(得分:20)

askewchan's answer描述了执行此操作的方法(您无法在已存在的名称下创建数据集,但您当然可以修改数据集的数据)。但请注意,数据集必须与您要写入的数据(X1)具有相同的形状。如果您想要使用不同形状的其他数据集替换数据集,首先必须将其删除:

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