Я пытаюсь отсортировать строки одного массива по значениям другого. Например:
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,:]
совпадают).
Используйте функцию zip: zip( *sorted( zip(arr1, arr2) ) )
Это сделает то, что вам нужно.
Теперь объяснение: zip(arr1, arr2)
объединит два списка, поэтому у вас есть [(0, [... список 0 ...]), (1, [... список 1. ..]), ...] Далее мы запускаем sorted(...)
, который по умолчанию сортируется на основе первого поля в кортеже. Затем мы снова запускаем zip(...)
, который берет кортежи из отсортированного и создает два списка, из первого элемента в кортеже (из arr1) и второго элемента (из arr2).