h5py在索引中返回意外结果

2024-04-20 14:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用一系列按顺序生成的numpy数组填充h5py数据集,这样我的内存就可以处理它了。在

h5py阵列被初始化以便第一维可以有任何大小

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

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

^{pr2}$

例如,在第一个数组中,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吗?在


Tags: 数据内存numpynonedatalen顺序create
2条回答

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

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]))

然后,数据集正确地添加值。在

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

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

我第一次尝试添加块时遇到一个错误:

^{pr2}$

但后来,当我用完分配的空间时,它悄无声息地失败了。没有错误,它只是没有存储新值。在

这是针对2.2.1版的

相关问题 更多 >