Как объединить две оси n-мерного массива в Python - PullRequest
0 голосов
/ 07 декабря 2018

Вместо n-мерного массива, давайте возьмем трехмерный массив, чтобы проиллюстрировать мой вопрос:

>>> import numpy as np
>>> arr = np.ones(24).reshape(2, 3, 4)

Итак, у меня есть массив формы (2, 3, 4).Я хотел бы объединить / слить 2-ю и 3-ю оси вместе, чтобы получить массив формы (2, 12).

Неправильно, думал, что я мог бы сделать это легко с np.concatenate:

>>> np.concatenate(arr, axis=1).shape
(3, 8)

Я нашел способ сделать это с помощью комбинации np.rollaxis и np.concatenate, но этовсе более и более уродливым, поскольку массив увеличивается в измерении:

>>> np.rollaxis(np.concatenate(np.rollaxis(arr, 0, 3), axis=0), 0, 2).shape
(2, 12)

Есть ли простой способ сделать это?Это кажется очень тривиальным, поэтому должна существовать какая-то функция, но я не могу ее найти.

РЕДАКТИРОВАТЬ: Действительно, я мог бы использовать np.reshape, что означает сначала вычисление размеров оси.Возможно ли это без предварительного доступа / вычисления формы?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

В последних версиях Python вы можете сделать:

anew = a.reshape(*a.shape[:k], -1, *a.shape[k+2:])

Я не рекомендую напрямую присваивать .shape, поскольку он не работает на достаточно несмежных массивах.

0 голосов
/ 07 декабря 2018

Допустим, у вас есть n размеры в вашем массиве, и вы хотите объединить смежные оси i и i+1:

shape = a.shape
new_shape = list(shape[:i]) + [-1] + list(shape[i+2:])
a.shape = new_shape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...