web-dev-qa-db-ja.com

h5pyを使用してh5ファイル内の配列を上書きする方法

私はかなり複雑なh5ファイルのごく一部であるnumpy配列を上書きしようとしています。

配列を抽出し、いくつかの値を変更してから、配列を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);

これを成功させる方法についての提案はありますか?

29
user3508433

データセットを作成するのではなく、値を割り当てます。

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
26
askewchan

askewchanの答え はその方法を説明しています(既存の名前でデータセットを作成することはできませんが、もちろんデータセットのデータを変更することはできます)。ただし、データセットはデータと同じ形状である必要があることに注意してください(X1)書き込み中です。データセットを他の異なる形状のデータセットとreplaceしたい場合は、まず削除する必要があります。

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