numpy.sort(a,axis=-1,kind='quicksort',order=None)[source]¶Return a sorted copy of an array.
| Parameters: |
|
|---|---|
| Returns: |
|
See also
ndarray.sortargsortlexsortsearchsortedpartitionNotes
The various sorting algorithms are characterized by their average speed,worst case performance, work space size, and whether they are stable. Astable sort keeps items with the same key in the same relativeorder. The three available algorithms have the followingproperties:
| kind | speed | worst case | work space | stable |
|---|---|---|---|---|
| ‘quicksort’ | 1 | O(n^2) | 0 | no |
| ‘mergesort’ | 2 | O(n*log(n)) | ~n/2 | yes |
| ‘heapsort’ | 3 | O(n*log(n)) | 0 | no |
All the sort algorithms make temporary copies of the data whensorting along any but the last axis. Consequently, sorting alongthe last axis is faster and uses less space than sorting alongany other axis.
The sort order for complex numbers is lexicographic. If both the realand imaginary parts are non-nan then the order is determined by thereal parts except when they are equal, in which case the order isdetermined by the imaginary parts.
Previous to numpy 1.4.0 sorting real and complex arrays containing nanvalues led to undefined behaviour. In numpy versions >= 1.4.0 nanvalues are sorted to the end. The extended sort order is:
- Real: [R, nan]
- Complex: [R + Rj, R + nanj, nan + Rj, nan + nanj]
where R is a non-nan real value. Complex values with the same nanplacements are sorted according to the non-nan part if it exists.Non-nan values are sorted as before.
New in version 1.12.0.
quicksort has been changed to an introsort which will switchheapsort when it does not make enough progress. This makes itsworst case O(n*log(n)).
‘stable’ automatically choses the best stable sorting algorithmfor the data type being sorted. It is currently mapped tomerge sort.
Examples
>>>a=np.array([[1,4],[3,1]])>>>np.sort(a)# sort along the last axisarray([[1, 4], [1, 3]])>>>np.sort(a,axis=None)# sort the flattened arrayarray([1, 1, 3, 4])>>>np.sort(a,axis=0)# sort along the first axisarray([[1, 1], [3, 4]])
Use theorder keyword to specify a field to use when sorting astructured array:
>>>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')])
Sort by age, then height if ages are equal:
>>>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')])