How to overwrite array inside h5 file using h5py

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

I'm trying to overwrite a numpy array that's a small part of a pretty complicated h5 file.

I'm extracting an array, changing some values, then want to re-insert the array into the h5 file.

I have no problem extracting the array that's nested.

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

My attempted code looks something like this with no success:

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

As a sanity check, I executed this in Matlab using the following code, and it worked with no problems.

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

Does anyone have any suggestions on how to do this successfully?

回答1:

You want to assign values, not create a dataset:

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

To confirm the changes were properly made and saved:

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


回答2:

askewchan's answer describes the way to do it (you cannot create a dataset under a name that already exists, but you can of course modify the dataset's data). Note, however, that the dataset must have the same shape as the data (X1) you are writing to it. If you want to replace the dataset with some other dataset of different shape, you first have to delete it:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!