我正在尝试覆盖一个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);
有没有人对如何成功地提出任何建议?
答案 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)