Как изменить NumPy массив с переупорядочением? - PullRequest
3 голосов
/ 21 мая 2019

У меня есть массив 1 x 2 x 3:

>>> a = np.array([[[1,2,3],[4,5,6]]])
>>> a
array([[[1, 2, 3],
        [4, 5, 6]]])
>>> a.shape
(1, 2, 3)

Я хочу изменить его на (3,1,2), но чтобы элементы вдоль оригинального dim 3 теперь были вдоль dim 1. Я хочу, чтобы результат выглядел так:

>>> new_a
array([[[1, 4]],
       [[2, 5]],
       [[3, 6]]])

и когда я просто использую изменение формы, я получаю правильную форму, но элементы находятся в том же порядке, а не в том, что я хочу:

>>> a.reshape((3,1,2))
array([[[1, 2]],
       [[3, 4]],
       [[5, 6]]])

Как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 21 мая 2019

Просто используйте np.transpose -

a.transpose(2,0,1)

Пробный прогон -

In [347]: a
Out[347]: 
array([[[1, 2, 3],
        [4, 5, 6]]])

In [348]: a.transpose(2,0,1)
Out[348]: 
array([[[1, 4]],

       [[2, 5]],

       [[3, 6]]])

В качестве альтернативы:

С np.moveaxis -

np.moveaxis(a,2,0)

С np.rollaxis -

np.rollaxis(a,2,0)
1 голос
/ 21 мая 2019

Есть несколько способов, но transpose(), вероятно, самый простой:

array.transpose(2,0,1)
0 голосов
/ 29 июня 2019
import einops
einops.rearrange(x, 'x y z -> z x y')

И лучше использовать некоторые значимые имена осей вместо x, y, z (например, ширина, высота и т. Д.)

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