h5py 在索引中返回意外结果

h5py returning unexpected results in indexing

我正在尝试用我按顺序生成的一系列 numpy 数组填充 h5py 数据集,以便我的内存可以处理它。

h5py 数组已初始化,因此第一个维度可以具有任何大小,

f.create_dataset('x-data', (1, maxlen, 50), maxshape=(None, maxlen, 50))

生成每个 numpy 数组 X 后,我正在使用

f['x-data'][alen:alen + len(data),:,:] = X

例如,在第一个数组中,alen=0 和 len(data)=10056。然后我增加 alen,这样下一个数组将从最后一个数组结束的地方开始。

print f['x-data'][alen:alen + len(data),:,:].shape, alen, len(data)

(1L, 60L, 50L) 0 10056

有谁知道为什么 0:10056 索引被解释为 1L?

我复制了你的例子,但规模要小得多。每次添加元素时我都必须调整大小,例如

f['xdata'].resize(50,axis=0)

我第一次尝试添加块时出现错误:

TypeError: Can't broadcast (10, 20, 10) -> (1, 20, 10)

但后来,当我超出分配的 space 时,它无声地失败了。没有错误,它只是没有最终存储新值。

这是版本 2.2.1

我从用户组中一位乐于助人的人那里找到了答案。

maxshape(None) 功能并不意味着数据集会自动调整大小 - 每次添加新输入时都必须调整大小。所以在添加新数据之前必须增加第一个维度:

    x.resize((x.shape[0] + X.shape[0], X.shape[1], X.shape[2]))
    y.resize((y.shape[0] + Y.shape[0], Y.shape[1], Y.shape[2]))

然后数据集会正确添加值。