2016-12-08 5 views
1

У меня есть массив 4d numpy, который представляет набор данных с 3D-экземплярами. Допустим, что форма массива - (32, 32, 3, 73257).Реорганизация массива 4d numpy

Как изменить форму массива на (73257, 32, 32, 3)?

--- Вопрос обновлен Кажется, что и rollaxis, и транспонирование делают трюк.

Спасибо за ответы!

+1

Связанный - http://stackoverflow.com/questions/41022182/change-shape-of-nparray – Divakar

+0

'transpose' также будет работать здесь, если вы использовали' (3, 0, 1, 2) ' – Eric

+0

Вы правы , Я исправлю свой ответ как можно скорее. – Panos

ответ

4

np.transpose функция делает именно то, что вы хотите, вы можете передать аргумент оси, который контролирует какую ось вы хотите поменять местами:

a = np.empty((32, 32, 3, 73257)) 
b = np.transpose(a, (3, 0, 1, 2)) 

Ось b является перестановочной версией: a 0 оси b является 3-й осью a, ось 1 b - 0-я ось a и т. Д.

Таким образом, вы можете указать, какие оси размера 32 вы хотите в втором или третьем месте:

b = np.transpose(a, (3, 1, 0, 2)) 

дает также массив нужной формы, но отличается от предыдущей.

0

Похоже, что np.rollaxis(arr, axis=-1) будет делать то, что вы хотите. Пример:

>>> arr = np.empty(32, 32, 3, 73257) 
>>> arr2 = np.rollaxis(arr, axis=-1) 
>>> arr2.shape 
(73257, 32, 32, 3) 

Это сделает arr[i,j,k,l] == arr2[l,i,j,k] для всех ijkl

Смежные вопросы