Spec-Zone.ru › NumPy 1.18

numpy.lexsort

numpy.lexsort(keys, axis=-1)

Выполнить косвенную стабильную сортировку с использованием последовательности ключей.

При наличии нескольких ключей сортировки, которые можно интерпретировать как столбцы в электронных таблицах, lexsort возвращает массив целочисленных индексов, описывающих порядок сортировки по нескольким столбцам. Последний ключ в последовательности используется для первичного порядка сортировки, предпоследний ключ — для вторичного порядка сортировки и так далее. Аргумент ключей должен быть последовательностью объектов, которые могут быть преобразованы в массивы одинаковой формы. Если для аргумента ключей предоставлена двумерная матрица, её строки интерпретируются как ключи сортировки, а сортировка производится в соответствии с последней строкой, предпоследней строкой и т.д.

Параметры
keys(k, N) array or tuple containing k (N,)-shaped sequences

k различные «столбцы», подлежащие сортировке. Последний столбец (или строка, если keys является двумерным массивом) является первичным ключом сортировки.

axisint, optional

Ось, подлежащая косвенной сортировке. По умолчанию сортировка выполняется по последней оси.

Возвращает
indices(N,) ndarray of ints

Массив индексов, которые сортируют ключи вдоль указанной оси.

См. также

argsort

Косвенная сортировка.

ndarray.sort

Сортировка на месте.

sort

Возвращает отсортированную копию массива.

Примеры

Сортировка имён: сначала по фамилии, затем по имени.

>>> surnames =    ('Hertz',    'Galilei', 'Hertz')
>>> first_names = ('Heinrich', 'Galileo', 'Gustav')
>>> ind = np.lexsort((first_names, surnames))
>>> ind
array([1, 2, 0])
>>> [surnames[i] + ", " + first_names[i] for i in ind]
['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']

Сортировка двух столбцов чисел:

>>> a = [1,5,1,4,3,4,4] # First column
>>> b = [9,4,0,4,0,2,1] # Second column
>>> ind = np.lexsort((b,a)) # Sort by a, then by b
>>> ind
array([2, 0, 4, 6, 5, 3, 1])
>>> [(a[i],b[i]) for i in ind]
[(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]

Обратите внимание, что сортировка выполняется сначала по элементам a. Вторичная сортировка выполняется по элементам b.

Обычная argsort дала бы:

>>> [(a[i],b[i]) for i in np.argsort(a)]
[(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)]

Структурированные массивы сортируются лексикографически по argsort:

>>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)],
...              dtype=np.dtype([('x', int), ('y', int)]))
>>> np.argsort(x) # or np.argsort(x, order=('x', 'y'))
array([2, 0, 4, 6, 5, 3, 1])

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.lexsort.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API