如何更新 h5py 中的数组?

How can I update arrays in h5py?

我需要一个数组来保存值,但我也想稍后随时编辑数组中的一些值。

我创建了一个包含一些随机值的数组并将其保存到磁盘。我能读懂。比我想更新它的值“23”的数组切片。当我再次阅读它时,它看起来并没有改变。

如何更新这些值?

import numpy as np
import h5py

x, y = 100,20

# create
a = np.random.random(size=(x, y))
h5f = h5py.File('data.h5', 'w')
h5f.create_dataset('dataset_1', data=a)
print a[1][0:5] # [ 0.77474947  0.3618912   0.16000164  0.47827977  0.93955235]
h5f.close()

# read
h5f = h5py.File('data.h5','r')
b = h5f['dataset_1'][:]
print b[1][0:5] #[ 0.77474947  0.3618912   0.16000164  0.47827977  0.93955235]
h5f.close()

# update
h5f = h5py.File('data.h5', 'r+')
b = h5f['dataset_1'][:]
b[1][0:5] = 23
print b[1][0:5] #[ 23.  23.  23.  23.  23.]
h5f.close()

# read again
h5f = h5py.File('data.h5','r')
b = h5f['dataset_1'][:]
print b[1][0:5] #[ 0.77474947  0.3618912   0.16000164  0.47827977  0.93955235]
h5f.close()

追加模式适合我。创建文件:

fh = h5py.File('dummy.h5', 'w')
fh.create_dataset('random', data=np.reshape(np.asarray([0, 1, 2, 3]), (2, 2)))
fh.close()

以追加模式('a',默认模式)打开和编辑..

fh = h5py.File('dummy.h5', 'a')
print fh['random'][:]
fh['random'][0, 0] = 1337
print fh['random'][:]
fh.close()

..再次检查

fh = h5py.File('dummy.h5', 'r')
print fh['random'][:]
fh.close()

写入模式('w')似乎清除了整个文件。编辑:直接访问数据集很重要。正如较早的答案所指出的:在您的问题描述中,您将 'dataset_1' 的内容分配给 b,然后编辑 b.

编辑 1:'r+' 对我也有效,问题可能出在其他地方。也许您访问数据集的方式(按索引而不是按名称)有所不同。

编辑 2:也适用于二维。添加了一些关于索引的信息