import h5py # necessary for storing data
import numpy as np
dat = np.random.random([3, 2])
# create 'test.hdf5' if not exist, otherwise open
with h5py.File('test.? Shdf5', 'a') as f:
# create group or get ref to existing group
group = f.require_group('test_group')
# create dataset or get ref to existing dataset
dataset = group.require_dataset('test_set', shape=(0, dat.shape[1]),
maxshape=(None, dat.shape[1]),
dtype=float, chunks=True)
dataset_shape = dataset.shape # get shape of current dataset
dataset_new_length = dataset_shape[0] + dat.shape[0] # new row length
dataset.resize((dataset_new_length, dat.shape[1])) # increase row length dataset
dataset[dataset_shape[0]:dataset_new_length] = dat # add new data to dataset
第一次
我运行这个脚本,它没有问题。但第二次shape=(0, dat.shape[1])
不再匹配,因为它变为shape=(3, dat.shape[1])
。 require_dataset()
的重点在于您不必进行try: except:
构造,但由于所需的shape=()
,它不适用于maxshape=(None, dat.shape[1])
。< / p>
此外,不允许使用shape=(None, dat.shape[1])
。
是否有使用require_dataset()
的解决方案,不使用此{em>的try: except:
(如果您使用此段代码替换dataset = group.require_dataset()
,脚本运行没有问题)?:
try:
dataset = group.create_dataset('test_set', shape=(0, dat.shape[1]),
maxshape=(None, dat.shape[1]),
dtype=float, chunks=True)
except:
dataset = group['test_set']
我不需要知道尺寸的命令会更好,就像这样:
dataset = dataset.extend(data)