numpy.sort
-
numpy.sort(a, axis=-1, kind=None, order=None)[source] -
Возвращает отсортированную копию массива.
- Параметры
-
-
aarray_like -
Массив, который нужно отсортировать.
-
axisint or None, optional -
Ось, по которой необходимо выполнить сортировку. Если None, массив сжимается перед сортировкой. По умолчанию -1, что сортирует по последней оси.
-
kind{‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, optional -
Алгоритм сортировки. По умолчанию ‘quicksort’. Обратите внимание, что как ‘stable’, так и ‘mergesort’ используют timsort или radix sort в качестве подхода и, как правило, фактическая реализация будет варьироваться в зависимости от типа данных. Опция ‘mergesort’ сохраняется для обратной совместимости.
Изменено в версии 1.15.0.: Добавлена опция ‘stable’.
-
orderstr or list of str, optional -
Когда
aпредставляет собой массив с определёнными полями, этот параметр указывает, какие поля сравнивать в первую, вторую и т.д. очередь. Одно поле может быть задано как строка, и не все поля обязательно должны быть указаны, но неуказанные поля всё равно будут использоваться в том порядке, в котором они появляются в dtype, для разбиения ничьих.
-
- Возвращает
-
-
sorted_arrayndarray -
Массив того же типа и формы, что и
a.
-
См. также
-
ndarray.sort -
Метод для сортировки массива на месте.
-
argsort -
Косвенная сортировка.
-
lexsort -
Косвенная стабильная сортировка по нескольким ключам.
-
searchsorted -
Поиск элементов в отсортированном массиве.
-
partition -
Частичная сортировка.
Заметки
Различные алгоритмы сортировки характеризуются своей средней скоростью, наихудшим случаем, размером рабочей области и тем, являются ли они стабильными. Стабильная сортировка сохраняет элементы с одинаковым ключом в том же относительном порядке. Четыре алгоритма, реализованные в NumPy, обладают следующими свойствами:
kind
скорость
худший случай
рабочая область
стабильность
‘quicksort’
1
O(n^2)
0
нет
‘heapsort’
3
O(n*log(n))
0
нет
‘mergesort’
2
O(n*log(n))
~n/2
да
‘timsort’
2
O(n*log(n))
~n/2
да
Примечание
Тип данных определяет, какой из ‘mergesort’ или ‘timsort’ фактически используется, даже если указан ‘mergesort’. Пользовательский выбор на более мелком уровне в настоящее время недоступен.
Все алгоритмы сортировки создают временные копии данных при сортировке по любой оси, кроме последней. Следовательно, сортировка по последней оси быстрее и использует меньше памяти, чем сортировка по любой другой оси.
Порядок сортировки для комплексных чисел — лексикографический. Если и действительная, и мнимая части не являются nan, то порядок определяется действительными частями, за исключением случаев равенства, в которых порядок определяется мнимыми частями.
До версии numpy 1.4.0 сортировка вещественных и комплексных массивов, содержащих значения nan, приводила к неопределённому поведению. В версиях numpy >= 1.4.0 значения nan сортируются в конец.
Расширенный порядок сортировки:
- Вещественный: [R, nan]
- Комплексный: [R + Rj, R + nanj, nan + Rj, nan + nanj]
где R — не являющееся nan вещественное значение. Комплексные значения с теми же расположениями nan сортируются в соответствии с не являющейся nan частью, если она существует. Не являющиеся nan значения сортируются как и прежде.
Новое в версии 1.12.0.
quicksort был изменён на introsort. Когда сортировка не делает достаточно прогресса, она переключается на heapsort. Эта реализация делает quicksort O(n*log(n)) в худшем случае.
‘stable’ автоматически выбирает лучший стабильный алгоритм сортировки для типа данных, который сортируется. Он, наряду с ‘mergesort’, в настоящее время отображается на timsort или radix sort в зависимости от типа данных. Совместимость API с предыдущими версиями в настоящее время ограничивает возможность выбора реализации, и она жёстко задана для различных типов данных.
Новое в версии 1.17.0.
Timsort добавлен для повышения производительности на уже отсортированных или почти отсортированных данных. На случайных данных timsort почти идентичен mergesort. Он теперь используется для стабильной сортировки, в то время как quicksort по-прежнему является алгоритмом сортировки по умолчанию, если не выбран другой.
Изменено в версии 1.17.0.
NaT теперь сортируется в конец массивов для согласованности с NaN.
Примеры
>>> a = np.array([[1,4],[3,1]]) >>> np.sort(a) # sort along the last axis array([[1, 4], [1, 3]]) >>> np.sort(a, axis=None) # sort the flattened array array([1, 1, 3, 4]) >>> np.sort(a, axis=0) # sort along the first axis array([[1, 1], [3, 4]])Используйте ключевое слово
orderдля указания поля, которое необходимо использовать при сортировке структурированного массива:>>> dtype = [('name', 'S10'), ('height', float), ('age', int)] >>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38), ... ('Galahad', 1.7, 38)] >>> a = np.array(values, dtype=dtype) # create a structured array >>> np.sort(a, order='height') array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41), ('Lancelot', 1.8999999999999999, 38)], dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])Отсортировать по возрасту, а затем по росту, если возраста равны:
>>> np.sort(a, order=['age', 'height']) array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38), ('Arthur', 1.8, 41)], dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.sort.html