Итерация по многомерному массиву

#python #numpy-ndarray

#python #numpy-ndarray

Вопрос:

У меня есть массив формы (3,5,96,96), где каналы = 3, количество кадров = 5, а высота и ширина = 96. Я хочу выполнить итерацию по размеру 5, чтобы получить изображения с размером (3,96,96). Код, который я пробовал, приведен ниже.

 b = frame.shape[1]
for i in range(b):
     fr = frame[:,i,:,:]
 

Но это не работает.

Ответ №1:

Вы можете поменять ось (используя numpy.swapaxes(a, axis1, axis2) для получения второго (кадра) в первой позиции

 import numpy as np

m = np.zeros((3, 5, 96, 96))

n = np.swapaxes(m, 0, 1)


print(n.shape)
 
 (5, 3, 96, 96)
 

Ответ №2:

Вам нужно выполнить итерацию по первой оси, чтобы достичь желаемого результата, это означает, что вам нужно переместить ось, которую вы хотите выполнить итерацию, в первую позицию. Вы можете достичь этого с помощью np.moveaxis

 m = np.zeros((3, 5, 96, 96))
np.moveaxis(m, 1, 0).shape
(5, 3, 96, 96)