是否可以通过追加新数据来Sequence
两个轴?在h5py Docs中的文档之后,我可以使用resize
和resize
将新数据附加到一个轴上。
但是我现在尝试的是使用与追加到一个轴相同的逻辑,一次将数据追加到两个轴。但是我得到的是一个maxshape
。这可能是由于块大小而引起的,但无法弄清楚。
任何建议
这是我到目前为止尝试过的:
TypeError: Can't broadcast (10000, 500, 2) -> (10000, 1000, 2)
我评论了将数据附加到新轴时的尝试。但是我得到了先前的错误。将数据追加到轴0可以按预期工作,但是尝试对两个轴进行相同操作都会失败。
答案 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的填充块。