一次调整两个轴的大小

时间:2018-07-11 20:13:38

标签: python numpy h5py

是否可以通过追加新数据来Sequence两个轴?在h5py Docs中的文档之后,我可以使用resizeresize将新数据附加到一个轴上。 但是我现在尝试的是使用与追加到一个轴相同的逻辑,一次将数据追加到两个轴。但是我得到的是一个maxshape。这可能是由于块大小而引起的,但无法弄清楚。 任何建议 这是我到目前为止尝试过的:

TypeError: Can't broadcast (10000, 500, 2) -> (10000, 1000, 2)

我评论了将数据附加到新轴时的尝试。但是我得到了先前的错误。将数据追加到轴0可以按预期工作,但是尝试对两个轴进行相同操作都会失败。

1 个答案:

答案 0 :(得分:0)

写入可调整大小的dataset就像写入numpy数组一样-您必须在所有维度上指定切片的正确大小。

在二维空间中扩展时,需要注意正确填写所有块。您不仅要添加行,还要添加列:

dset = f.create_dataset(str(name),...
    maxshape = (None, None, shape[2]))
dset[...] = np.ones(shape)     # initial fill
print(dset.shape)
for i in range(2,4):
    dset.resize(dset.shape[0]+shape[0], axis=0)
    dset[-shape[0]:, :, :] = np.ones((shape[0], dset.shape[1], shape[2]))*i
    # add an axis 0 block and fill that
    print(dset.shape)
    for j in range(2):
        dset.resize(dset.shape[1]+shape[1], axis = 1)
        dset[-shape[0]:, -shape[1]:, : ] = np.ones(shape)*(i+j)
        # add an axis 1 block and fill that
        print(dset.shape)

结果打印:

(1000, 500, 2)
(2000, 500, 2)
(2000, 1000, 2)
(2000, 1500, 2)
(3000, 1500, 2)
(3000, 2000, 2)
(3000, 2500, 2)
Final dataset size: (3000, 2500, 2)

但是我并没有填写所有扩展空间。

使用shape = (3,2,1)

(3, 2, 1)
(6, 2, 1)
(6, 4, 1)
(6, 6, 1)
(9, 6, 1)
(9, 8, 1)
(9, 10, 1)
Final dataset size: (9, 10, 1)
Chunks size: (3, 2, 1)

以及实际数据print(np.squeeze(dset[...]))

[[1 1 0 0 0 0 0 0 0 0]
 [1 1 0 0 0 0 0 0 0 0]
 [1 1 0 0 0 0 0 0 0 0]
 [2 2 2 2 3 3 0 0 0 0]
 [2 2 2 2 3 3 0 0 0 0]
 [2 2 2 2 3 3 0 0 0 0]
 [3 3 3 3 3 3 3 3 4 4]
 [3 3 3 3 3 3 3 3 4 4]
 [3 3 3 3 3 3 3 3 4 4]]

我调整了大小,但没有明确填充0的填充块。