Получение индексов в порядке возрастания списка - PullRequest
0 голосов
/ 27 января 2019

Я знаю, что этот вопрос задавался сто раз, но всегда кажется, что ответ "использовать аргумент numpy's". Но либо я неверно истолковываю то, что спрашивает большинство людей, либо ответы на вопрос не верны. Как бы то ни было, я хочу получить индексы в порядке возрастания списка. Формулировка вводит в заблуждение, поэтому в качестве примера приведен список [4, 2, 1, 3] Я ожидаю получить список обратно [3, 1, 0, 2]. Самый маленький элемент - 1, поэтому он получает индекс 0, самый большой - 4, поэтому он получает индекс 3. Мне кажется, что часто предлагается argsort, но, похоже, он этого не делает.

from numpy import argsort

l = [4, 2, 1, 3]
print(argsort(l))
# [2, 1, 3, 0]
# Expected [3, 1, 0, 2]

Очевидно, что argsort делает что-то еще, так что он на самом деле делает и как это похоже на ожидаемое поведение, так что это так часто (ошибочно) предлагается? И, что более важно, как я могу получить желаемый результат?

1 Ответ

0 голосов
/ 27 января 2019

argsoft () в основном преобразует ваш список в отсортированный список признаков.

l = [4, 2, 1, 3]

Сначала он получает индекс каждого элемента в списке, поэтому новый список становится:

indexed=[0, 1, 2, 3]

Затем сортирует индексированный список по элементам в исходном списке.Как 4:0 , 2:1 , 1:2 and 3:3 где: означает «соответствует».

Сортируя исходный список, мы получаем

l=[1, 2, 3, 4]

И помещая значения каждого соответствующего индекса старого списка

new=[2,1,3,0]

Так что в основном он сортирует признаки списка в соответствии с исходным списком.Это насколько я понял.Извините, если я ошибаюсь.

Надеюсь, это поможет

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