Изменить форму и объединить в массиве numpy - PullRequest
1 голос
/ 09 февраля 2020

Я хотел бы знать, существует ли простой способ преобразования такой матрицы:

[[[1, 2, 3, 4], [5, 6, 7, 8]], [[9, 10, 11, 12], [13, 14, 15, 16]]]

в

[[1 ,2 ,5 ,6 ],
 [3 ,4 ,7 ,8 ],
 [9 ,10,13,14],
 [11,12,15,16]]

, что эквивалентно изменению формы каждой начальный список в 2x2 матрицы, а затем объединить их; например np.array([1,2,3,4]).reshape((2,2)) дает [[1,2], [3,4]]

np.array([5, 6, 7, 8]).reshape((2,2)) дает [[5,6], [7,8]]

так

np.concatenate((np.array([1,2,3,4]).reshape((2,2)), np.array([5, 6, 7, 8]).reshape((2,2))), axis=1)

даст

array([[1 ,2 ,5 ,6 ],
       [3 ,4 ,7 ,8 ]])

et c ...

Это действительно фиктивный пример, так как мне нужно иметь дело с большим (и большим) матрицами Я должен найти более простой метод.

1 Ответ

1 голос
/ 09 февраля 2020

Мы можем использовать reshape с swapaxes и concatenate вдоль первой оси:

np.concatenate(a.reshape(a.shape[0], a.shape[1], 2, -1)
                 .swapaxes(1,2)
                 .reshape(a.shape))

array([[ 1,  2,  5,  6],
       [ 3,  4,  7,  8],
       [ 9, 10, 13, 14],
       [11, 12, 15, 16]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...