Восстановить перестановку вектора - PullRequest
1 голос
/ 28 июня 2019

В numpy, как мне эффективно восстановить перестановку, примененную алгоритмом сортировки к вектору так, чтобы при каждом индексе в результирующем векторе у меня было целое число, представляющее индекс, на который элемент в оригинальном векторе проецируется после примененияалгоритма сортировки.

>>>import numpy as np

>>> my_vector = np.random.random_integers(1,50,size=5)
>>> my_vector
array([23, 20, 33, 38, 27])

>>> my_v_sorted = np.sort(my_vector)
>>> my_v_sorted
array([20, 23, 27, 33, 38])

>>> what_i_want = np.array([1,0,4,5,3])

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

1 Ответ

2 голосов
/ 29 июня 2019

Вы можете использовать np.argsort()

import numpy as np

my_vector = np.array([23, 20, 33, 38, 27])

my_v_sorted = np.sort(my_vector)

what_i_want = np.argsort(my_vector)

Это дает следующий вывод

>>> my_v_sorted
>>> array([20, 23, 27, 33, 38])

>>> what_i_want
>>> array([1, 0, 4, 2, 3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...