Пример в документе np.argsort - PullRequest
0 голосов
/ 27 июня 2018

По какой-то причине я не могу решить эту проблему.

Согласно приведенному здесь примеру для 1-мерного массива, https://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html

x = np.array([3, 1, 2])
np.argsort(x)

массив ([1, 2, 0])

И я попробовал это сам. Но по умолчанию возвращаемый результат должен быть возрастающим .. значение

x([result])

возвращает

массив ([1, 2, 3])

Таким образом, результат не должен быть [2,0,1]

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 27 июня 2018

В документации первая строка гласит «Возвращает индексы, которые будут сортировать массив». Следовательно, если вы хотите, чтобы позиции отсортированных значений у нас были:

x = np.array([3, 1, 2])
np.argsort(x)
>>>array([1, 2, 0])

здесь нам нужны позиции индекса 1, 2 и 3 в х. Часть 3 равна 0, часть 1 равна 1, а позиция 2 равна 2, следовательно array([1, 2, 0]) = sorted_array (1,2,3).

Опять из примечаний: "argsort возвращает массив индексов той же формы, что и данные индекса по заданной оси в отсортированном порядке."

Более интуитивно понятный способ понять, что это значит, - использовать цикл for, где мы перебираем наши возвращенные значения argsort, а затем индексируем исходный массив со следующими значениями:

x   = np.array([3, 1, 2])
srt_positions = np.argsort(x)

for k in srt_positions:
    print x[k]

>>> 1, 2, 3
...