numpy.argsort()

Функция numpy.argsort() возвращает массив индексов, которые сортируют элементы исходного массива в порядке возрастания. Применив их через индексацию, можно получить отсортированный массив либо параллельно отсортировать связанные данные.

Сигнатура

numpy.argsort(a, axis=-1, kind=None, order=None, *, stable=None)

Параметры

  • a — входной массив.

  • axis — ось сортировки. По умолчанию -1 (последняя). None — сортировка по «плоскому» представлению.

  • kind — алгоритм: 'quicksort' (по умолчанию), 'mergesort', 'heapsort', 'stable'.

  • order — поле для структурированных массивов.

  • stable — требовать ли стабильную сортировку.

Возвращаемое значение

ndarray индексов типа intp.

Примеры

Пример 1. Индексы сортировки.

import numpy as np

arr = np.array([30, 10, 20])
idx = np.argsort(arr)
print(idx)
print(arr[idx])
[1 2 0]
[10 20 30]

Пример 2. Сортировка по убыванию.

arr = np.array([3, 1, 4, 1, 5, 9, 2])
print(arr[np.argsort(arr)[::-1]])
[9 5 4 3 2 1 1]

Пример 3. Параллельная сортировка двух массивов.

scores = np.array([88, 95, 70, 100])
names = np.array(['Asel', 'Bek', 'Dana', 'Erik'])
order = np.argsort(scores)[::-1]
print(list(zip(names[order], scores[order])))
[('Erik', 100), ('Bek', 95), ('Asel', 88), ('Dana', 70)]

Пример 4. Сортировка строк 2D-массива по последней оси.

m = np.array([[3, 1, 2], [9, 4, 7]])
print(np.argsort(m, axis=1))
[[1 2 0]
 [1 2 0]]

Пример 5. Топ-3 самых ярких пикселей.

img = np.array([12, 200, 55, 240, 90, 180, 230])
top3 = np.argsort(img)[-3:][::-1]
print(top3, img[top3])
[3 6 1] [240 230 200]

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации NumPy (https://numpy.org/doc/stable/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.