Ответ 1
Используйте argsort
следующим образом:
arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]
Этот пример сортируется в порядке убывания.
Я пытаюсь сортировать строки одного массива значениями другого. Например:
import numpy as np
arr1 = np.random.normal(1, 1, 80)
arr2 = np.random.normal(1,1, (80,100))
Я хочу сортировать arr1 в порядке убывания и поддерживать текущую связь между arr1 и arr2 (т.е. после сортировки обе строки arr1[0]
и arr2[0, :]
совпадают).
Используйте argsort
следующим образом:
arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]
Этот пример сортируется в порядке убывания.
Используйте функцию zip: zip( *sorted( zip(arr1, arr2) ) )
Это сделает то, что вам нужно.
Теперь объяснение:
zip(arr1, arr2)
объединит два списка, поэтому у вас есть [(0, [... list 0...]), (1, [... list 1...]),...]
Затем мы запускаем sorted(...)
, который по умолчанию сортирует на основе первого поля в кортеже.
Затем мы снова запускаем zip(...)
, который перебирает кортежи из сортировки и создает два списка из первого элемента в кортеже (из arr1) и второго элемента (из arr2).