我有一个大小为[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:列表索引必须是整数或切片,而不是元组
有人可以帮我解决这个问题吗?非常感谢您的帮助。
答案 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,:,:,:]
如果是间歇性的,我可能会怀疑是内存问题。