Сортировать строки массива по другому массиву в Python - PullRequest
26 голосов
/ 25 января 2012

Я пытаюсь отсортировать строки одного массива по значениям другого.Например:

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, :] одинаковы).

Ответы [ 2 ]

41 голосов
/ 25 января 2012

Используйте argsort следующим образом:

arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]

Этот пример сортируется в порядке убывания.

4 голосов
/ 25 января 2012

Используйте функцию zip: zip( *sorted( zip(arr1, arr2) ) ) Это будет делать то, что вам нужно.

Теперь объяснение: zip(arr1, arr2) объединит два списка, поэтому у вас есть [(0, [... список 0 ...]), (1, [... список 1...]), ...] Далее мы запускаем sorted(...), который по умолчанию сортируется на основе первого поля в кортеже.Затем мы снова запускаем zip(...), который берет кортежи из отсортированного и создает два списка, из первого элемента в кортеже (из arr1) и второго элемента (из arr2).

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