我需要一个用于保存值的数组,但我还想在以后的任何时候编辑数组中的一些值。
我创建了一个包含一些随机值的数组并将其保存到磁盘。我可以读它。比我想要更新它,一个值为'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()
答案 0 :(得分:4)
追加模式适合我。创建文件:
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:也适用于二维。添加了一些有关索引的信息