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

Python 如何使用h5py覆盖h5文件内的数组,python,arrays,numpy,h5py,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', dat

我正试图覆盖一个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);

是否有人对如何成功执行此操作有任何建议?

您希望分配值,而不是创建数据集:

f1=h5py.File(文件名'r+')#打开文件
data=f1['meas/frame1/data']#加载数据
数据[…]=X1#为数据分配新值
f1.close()#关闭文件
要确认已正确进行并保存更改,请执行以下操作:

f1=h5py.File(文件名'r')
np.allclose(f1['meas/frame1/data'].值,X1)
#真的
描述了执行此操作的方法(您不能使用已存在的名称创建数据集,但您当然可以修改数据集的数据)。但是,请注意,数据集的形状必须与要写入的数据相同(
X1
)。如果要用其他不同形状的数据集替换该数据集,首先必须将其删除:


数据[…]=X1
非常关键!不要犯这样的错误:执行
data=X1
。第二个块只是检查是否所有东西都已关闭,对吗?因此,前4行完成了实际工作。另一个tripwire是,您必须覆盖完整的单个数据点;因此,如果数据是三维点,则必须更新完整的三维点。对数据点一个元素的更改(例如,仅Z坐标)不会更改anything@Dusch,您是对的,它只是一个检查,前四行完成了工作,但实际上它并没有关闭任何内容,而是检查值是否匹配。请参阅,如果我们只更新数据集的一部分,是否需要添加[…]?e、 如果我们要做数据[5:]=X1,其中len(数据)=len(X1)+5?
del f1['meas/frame1/data']
dset = f1.create_dataset('meas/frame1/data', data=X1)