NumPy | sort method
Start your free 7-days trial now!
Numpy's sort(~)
method returns the sorted copy of the input array. Note that the original array is left intact.
Parameters
1. a
| array_like
The input array.
2. axis
link | int
| optional
The axis along which to sort the input array. For 2D arrays, the allowed values are as follows:
Value | Meaning |
---|---|
| Flattens the array and sorts it |
| Sorts column-wise |
| Sorts row-wise |
By default, axis=-1
which means that sorting is performed only on the last axis. For 2D arrays, this means that the default sorting behaviour is row-wise.
3. kind
| string
| optional
The sorting algorithm to use. Currently, Numpy offers the following choices:
Kind | Speed | Worst case | Memory | Stable |
---|---|---|---|---|
quicksort | 1 (fast) | O(n^2) | 0 | no |
mergesort | 2 | O(nlogn) | ~n/2 | yes |
timsort | 2 | O(nlogn) | ~n/2 | yes |
heapsort | 3 (slow) | O(nlogn) | 0 | no |
Sorting algorithms that are "stable" retain the relative ordering of duplicate values. For instance, suppose you are sorting the array [(2,3), (2,1), (4,5)] by the first element of each tuple. We have a duplicate value of 2 here, so stable sorting algorithms ensure that (2,3) will always come before (2,1) since that is how they are ordered originally. Unstable searches provide no guarantee that such ordering is retained.
By default, kind="quicksort"
.
The datatype determines whether mergesort or timsort is used
Despite the fact that you can specify either mergesort or timsort, Numpy will ultimately make its decision on the data-type of the array. There is currently no way of enforcing your choice of algorithm between the two.
Timsort offers the best performance for sorted or nearly sorted arrays
Timsort is the latest searching algorithm added to Numpy (version 1.17). Timsort is still nearly as efficient as mergesort for randomly arranged numbers.
4. order
link | string
or list
of strings
| optional
The field to sort by. This is only applicable to structured arrays - see our example below for clarification.
Return value
A Numpy array that is a sorted copy of the input array.
Examples
Sorting one-dimensional arrays
x = np.array([1,4,2,3])np.sort(x)
array([1, 2, 3, 4])
Sorting two-dimensional arrays
Suppose we have the following 2D array:
x = np.array([[1,4],[3,2]])x
array([[1, 4], [3, 2]])
Sorting the flattened array
np.sort(x, axis=None)
array([1, 2, 3, 4])
Sorting row-wise
np.sort(x) # or explicitly set axis=1
array([[1, 4], [2, 3]])
Sorting column-wise
np.sort(x, axis=0)
array([[1, 2], [3, 4]])
Specifying order for structured arrays
Suppose we have the following structured array:
dtype = [('name', 'S15'), ('age', int)]values = [('Bob', 35), ('Alex', 15),('Cathy', 24)]x = np.array(values, dtype)x
array([(b'Bob', 35), (b'Alex', 15), (b'Cathy', 24)], dtype=[('name', 'S15'), ('age', '<i8')])
Our array x
consists of three tuples, with the 1st element as the name
, and the 2nd element as the age
.
To sort by name
:
np.sort(x, order="name")
array([(b'Alex', 15), (b'Bob', 35), (b'Cathy', 24)], dtype=[('name', 'S15'), ('age', '<i8')])
Notice how the tuples are sorted by name: Alex
, Bob
and then Cathy
.
To sort by age
:
np.sort(x, order="age")
array([(b'Bob', 15), (b'Cathy', 24), (b'Alex', 35)], dtype=[('name', 'S15'), ('age', '<i8')])
Notice how tuples are sorted by age: 15, 24 and then 35.
You could also pass in an array of labels to sort by (e.g. order=["name", "age"]
), which would sort the array by name
first, and then by age
.