numpy.argsort#
- numpy.argsort(a, ось=-1, kind=None, порядок=None, *, стабильный=None)[источник]#
Возвращает индексы, которые отсортировали бы массив.
Выполняет косвенную сортировку вдоль заданной оси, используя алгоритм, указанный kind ключевое слово. Возвращает массив индексов той же формы, что и a который индексирует данные вдоль заданной оси в отсортированном порядке.
- Параметры:
- aarray_like
Массив для сортировки.
- осьint или None, опционально
Ось, вдоль которой выполняется сортировка. По умолчанию -1 (последняя ось). Если None, используется сглаженный массив.
- kind{‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, опционально
Алгоритм сортировки. По умолчанию используется 'quicksort'. Обратите внимание, что как 'stable', так и 'mergesort' используют timsort под капотом, и, в целом, фактическая реализация будет варьироваться в зависимости от типа данных. Опция 'mergesort' сохранена для обратной совместимости.
- порядокstr или список str, необязательно
Когда a является массивом с определенными полями, этот аргумент указывает, какие поля сравнивать первыми, вторыми и т.д. Одно поле может быть указано как строка, и не все поля должны быть указаны, но неуказанные поля все равно будут использоваться в порядке их появления в dtype для разрешения ничьих.
- стабильныйbool, необязательно
Стабильность сортировки. Если
True, возвращаемый массив сохранит относительный порядокaзначения, которые сравниваются как равные. ЕслиFalseилиNoneэто не гарантируется. Внутренне этот параметр выбираетkind='stable'. По умолчанию:None.Новое в версии 2.0.0.
- Возвращает:
- index_arrayndarray, int
Массив индексов, которые сортируют a вдоль указанной ось. Если a является одномерным,
a[index_array]дает отсортированный a. В более общем случае,np.take_along_axis(a, index_array, axis=axis)всегда даёт отсортированный a, независимо от размерности.
Смотрите также
sortОписывает используемые алгоритмы сортировки.
lexsortКосвенная устойчивая сортировка с несколькими ключами.
ndarray.sortСортировка на месте.
argpartitionКосвенная частичная сортировка.
take_along_axisApply
index_arrayиз argsort в массив, как если бы вызывался sort.
Примечания
См.
sortдля примечаний о различных алгоритмах сортировки.Начиная с NumPy 1.4.0
argsortработает с вещественными/комплексными массивами, содержащими значения nan. Улучшенный порядок сортировки описан вsort.Примеры
Одномерный массив:
>>> import numpy as np >>> x = np.array([3, 1, 2]) >>> np.argsort(x) array([1, 2, 0])
Двумерный массив:
>>> x = np.array([[0, 3], [2, 2]]) >>> x array([[0, 3], [2, 2]])
>>> ind = np.argsort(x, axis=0) # sorts along first axis (down) >>> ind array([[0, 1], [1, 0]]) >>> np.take_along_axis(x, ind, axis=0) # same as np.sort(x, axis=0) array([[0, 2], [2, 3]])
>>> ind = np.argsort(x, axis=1) # sorts along last axis (across) >>> ind array([[0, 1], [0, 1]]) >>> np.take_along_axis(x, ind, axis=1) # same as np.sort(x, axis=1) array([[0, 3], [2, 2]])
Индексы отсортированных элементов N-мерного массива:
>>> ind = np.unravel_index(np.argsort(x, axis=None), x.shape) >>> ind (array([0, 1, 1, 0]), array([0, 0, 1, 1])) >>> x[ind] # same as np.sort(x, axis=None) array([0, 2, 2, 3])
Сортировка с ключами:
>>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '
), ('y', ' )]) >>> x array([(1, 0), (0, 1)], dtype=[('x', ' >>> np.argsort(x, order=('x','y')) array([1, 0])
>>> np.argsort(x, order=('y','x')) array([0, 1])