h5py扩展数据集而不知道行索引

时间:2017-09-07 08:58:42

标签: python numpy h5py

编辑以更准确地显示我的情况

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)

0 个答案:

没有答案