#python #sorting #numpy #scipy
#python #сортировка #numpy #scipy
Вопрос:
Допустим, у меня есть массив NumPy:
[[4 9 2]
[5 1 3]]
Я хочу отсортировать нижнюю строку этого массива, но чтобы верхняя строка выполняла сортировку, так что я получаю:
[[9 2 4]
[1 3 5]]
Я знаю, что вы можете сортировать подобным образом, используя функцию sorted(), но для этого требуется ввод и вывод списков.
Есть идеи? Большое спасибо!
Ответ №1:
import numpy as np
a = np.array([[4,9,2],[5,1,3]])
idx = np.argsort(a[1])
Теперь вы можете использовать idx для индексации вашего массива:
b=a[:,idx]
Комментарии:
1. Потрясающе, большое спасибо! Это решение было намного проще, чем я ожидал. Я читал примеры numpy argsort() и, вероятно, переоценил эту проблему.
Ответ №2:
Единственное (эффективное) решение, о котором я могу думать, требует копии исходного массива.
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]]
Это должно быть достаточно быстро, но, конечно, тратит впустую некоторую память.