46

かなり複雑な 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);

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

4

3 に答える 3

46

データセットを作成するのではなく、値を割り当てたい場合:

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
于 2014-04-07T23:50:08.590 に答える
0

さまざまなシナリオ:

  1. データセットの部分的な変更
with h5py.File(file_name,'r+') as ds:
  ds['meas/frame1/data'][5] = val # change index 5 to scalar "val"
  ds['meas/frame1/data'][3:7] = vals # change values of indices 3--6 to "vals"
  1. データセットの各値を変更します (データセットのサイズは同じです)
with h5py.File(file_name,'r+') as ds:
  ds['meas/frame1/data'][...] = X1 # change array values to those of "X1"
  1. データセットを異なるサイズのデータ​​セットに上書きする
with h5py.File(file_name,'r+') as ds:
  del ds['meas/frame1/data'] # delete old, differently sized dataset
  ds.create_dataset('meas/frame1/data',data=X1) # implant new-shaped dataset "X1"

File オブジェクトはコンテキスト マネージャーであるため、with ステートメントを使用すると、コードをパッケージ化し、変更が完了したらデータセットを自動的に閉じることができます。(データの読み取りのみが必要な場合は、読み取り/書き込みモードにする必要はありません!)

于 2021-10-13T11:03:16.880 に答える