numpy.lexsort
- numpy.lexsort(keys, axis=- 1)
-
Выполнить косвенную устойчивую сортировку с помощью последовательности ключей.
При наличии нескольких ключей сортировки, которые можно интерпретировать как столбцы в электронных таблицах, lexsort возвращает массив целочисленных индексов, описывающих порядок сортировки по нескольким столбцам. Последний ключ в последовательности используется для первичного порядка сортировки, предпоследний ключ — для вторичного порядка сортировки и так далее. Аргумент ключей должен быть последовательностью объектов, которые могут быть преобразованы в массивы одинаковой формы. Если для аргумента ключей предоставлена двумерная матрица, её строки интерпретируются как ключи сортировки, и сортировка выполняется по последней строке, предпоследней строке и т. д.
- Параметры
-
- keys(k, N) массив или кортеж, содержащий k (N,)-образных последовательностей
-
Различные «столбцы» для сортировки. Последний столбец (или строка, если
keys— двумерный массив) является первичным ключом сортировки. - axisint, необязательно
-
Ось для косвенной сортировки. По умолчанию сортировка выполняется по последней оси.
- Возвращает
-
- indices(N,) одномерный массив целых чисел
-
Массив индексов, сортирующих ключи вдоль указанной оси.
См. также
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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.lexsort.html