Numpy N-D阵列

时间:2018-10-24 22:46:00

标签: python arrays numpy

我有一个大小为[128,128,128,3]的numpy数组。您可以看到这是1组16组8图像堆栈,大小为128x128x3。我想将其重塑为大小[16,128,128,24]。 我的代码如下:

b_imgs_96_reshape = np.empty([16,128,128,24])
for i in range(0,128):
    b_imgs_96_reshape[i//8,:,:,(i%8)*3:(i%8)*3+3] = b_imgs_96[i,:,:,:]

但是我得到了错误,有时会随机崩溃。 这是错误消息:

  

TypeError:列表索引必须是整数或切片,而不是元组

有人可以帮我解决这个问题吗?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您的输入b_imgs_96具有形状(128、128、128、3)和标量dtype,则

1)您发布的代码段中没有可能触发您所报告的错误的列表

2)除非您在智能手表上执行此操作,否则这里的存储不应成为问题;对于64位dtype,确实是128x128x128x3x8〜50MB

您可以并且应该避免循环,而是这样做

 b_imgs_96_reshape = np.moveaxis(b_imgs_96.reshape(16, 8, 128, 128, 3), 1, 3).reshape(16, 128, 128, 24)

答案 1 :(得分:-1)

我无法重现您的错误。运行正常:

b_imgs_96 = np.ones([128,128,128,3])

b_imgs_96_reshape = np.empty([16,128,128,24])
for i in range(0,128):
    b_imgs_96_reshape[i//8,:,:,(i%8)*3:(i%8)*3+3] = b_imgs_96[i,:,:,:]

如果是间歇性的,我可能会怀疑是内存问题。