私はかなり複雑な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);
これを成功させる方法についての提案はありますか?
データセットを作成するのではなく、値を割り当てます。
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
askewchanの答え はその方法を説明しています(既存の名前でデータセットを作成することはできませんが、もちろんデータセットのデータを変更することはできます)。ただし、データセットはデータと同じ形状である必要があることに注意してください(X1
)書き込み中です。データセットを他の異なる形状のデータセットとreplaceしたい場合は、まず削除する必要があります。
del f1['meas/frame1/data']
dset = f1.create_dataset('meas/frame1/data', data=X1)