Numpy ND массив - PullRequest
       3

Numpy ND массив

0 голосов
/ 25 октября 2018

У меня есть массив с размером [128,128,128,3].Вы можете видеть это как стек из 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,:,:,:]

, но я получил ошибку, и она иногда вылетает случайно.Вот сообщение об ошибке:

Ошибка типа: индексы списка должны быть целыми числами или кусочками, а не кортежем

Может кто-нибудь помочь мне с этой проблемой ??Я действительно ценю твою помощь.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Если ваш ввод b_imgs_96 имеет форму (128, 128, 128, 3) и скалярный тип d тогда

1) в опубликованном вами фрагменте нет списков, которые могли бы вызвать ошибку, о которой вы говорите.сообщение о

2) здесь не должно быть проблем с памятью, если вы не делаете это на своих умных часах;действительно, 128x128x128x3x8 ~ 50 МБ для 64-битного dtype

Вы можете и, вероятно, следует избегать цикла, а вместо этого выполните

 b_imgs_96_reshape = np.moveaxis(b_imgs_96.reshape(16, 8, 128, 128, 3), 1, 3).reshape(16, 128, 128, 24)
0 голосов
/ 25 октября 2018

Я не могу воспроизвести вашу ошибку.Это работает нормально:

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,:,:,:]

Если это периодически, я могу заподозрить проблему с памятью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...