如何在h5py中更新数组?

时间:2015-06-05 16:04:19

标签: python arrays numpy 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()

1 个答案:

答案 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:也适用于二维。添加了一些有关索引的信息