Как использовать np.transpose()

Я пытаюсь понять, как правильно использовать np.transpose().

У меня есть массив np формы (4,28,28,8,8). Итак, это 4 изображения формы (224,224), которые я просмотрел, как показано предыдущей фигурой.

Я хотел бы вернуться к (4,224,224). Я считаю, что лучший способ - использовать функции np.transpose() и reshape(). Но я натыкаюсь на контрольно-пропускной пункт, как правильно вернуться назад.

Помощь. Пожалуйста и спасибо.

РЕДАКТИРОВАТЬ: (4 224 224) равно 4 (эта переменная может быть изменена, поскольку количество загружаемых изображений может измениться, может быть 4, может быть 1000) изображений формы (224 224). Я использовал listdir() для загрузки изображений. Во время загрузки я изменил размер до текущей формы (224 224). Я собираюсь выполнить операции над формой (4,28,28,8,8), которая технически представляет собой 4 изображения формы (224,224), разбитые на (28,28) блоки, каждый из которых содержит (8,8) блоков. Эту форму я получил, используя view_as_blocks, предоставленный scikit-image. Как только я выполню операции, требующие этой формы, я должен вернуться к (4 224 224). Где я застрял.


person TheTank    schedule 03.10.2017    source источник
comment
Как вы добрались до (4,28,28,8,8)?   -  person Divakar    schedule 03.10.2017
comment
Каково значение каждого измерения в (4,28,28,8,8)? Это влияет на ответ.   -  person Jeremy McGibbon    schedule 03.10.2017
comment
Вы хотите изменить форму из (4,28,8,28,8)? Параметр транспонирования (0,1,3,2,4) должен работать.   -  person hpaulj    schedule 03.10.2017
comment
@JeremyMcGibbon Я отредактировал вопрос, объяснив, как я получил форму и почему мне нужно вернуться обратно.   -  person TheTank    schedule 03.10.2017
comment
Чем это отличается от вашего вопроса от 22 августа? Он был помечен как дубликат с транспонированным ответом, stackoverflow.com/q/41510395/901925   -  person hpaulj    schedule 04.10.2017


Ответы (1)


Что вам нужно, вероятно:

b=np.swapaxes(a,3,2).reshape(4,28*8,28*8)

быть вашим массивом.

person B. M.    schedule 03.10.2017
comment
Так что нет смысла использовать транспонирование вообще? - person TheTank; 03.10.2017
comment
@JeremyMcGibbon Не могли бы вы предложить способ преобразования (4, 28, 28, 8, 8) в (4, 224, 224)? Или как получить доступ к внутренним блокам? - person TheTank; 03.10.2017
comment
Похоже, это решение должно работать. swapaxes выполняет здесь работу transpose. - person Jeremy McGibbon; 03.10.2017
comment
transposeхорошо для 2-х измерений; для большего количества измерений он переворачивает все измерения. swapaxes более понятен в вашем случае, но вы также можете использовать transpose(a,(0,1,3,2,4)). - person B. M.; 04.10.2017
comment
@Б.М. В конце концов я использовал транспонирование, но это тоже сработало. Спасибо. - person TheTank; 06.10.2017