2D сортировка с помощью NumPy - сортируйте 1 строку, а другую выполняйте сортировку - PullRequest
7 голосов
/ 26 октября 2011

Скажем, у меня есть массив NumPy:

[[4 9 2]
 [5 1 3]]

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

[[9 2 4]
 [1 3 5]]

Я знаю, что вы можете сортировать таким образом, используя функцию sorted (), но это требует ввода и вывода списков.

Есть идеи? Большое спасибо!

Ответы [ 2 ]

11 голосов
/ 26 октября 2011
import numpy as np
a = np.array([[4,9,2],[5,1,3]])
idx = np.argsort(a[1])

Теперь вы можете использовать idx для индексации вашего массива:

b=a[:,idx]
1 голос
/ 26 октября 2011

Единственное (эффективное) решение, о котором я могу подумать, - это копия исходного массива.

import numpy as np
a = np.array([[4,9,2],[5,1,3]])
idx = np.argsort(a[1])

Таким образом, idx является индексом отсортированного столбца .

c = a.copy()
for i in range(len(idx)):
  a[:,i] = c[:,idx[i]]

Это должно быть достаточно быстро, но, конечно, тратитьнемного памяти.

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