Sunday, May 31, 2020

Numpy sorting ndarray

NumPy sorting arrays


The sort() method


We can sort arrays(Numpy ndarrays) very easily using the sort() method. The sorting operation are used to place the items in some defined order such as ascending, descending, alphabetically, etc.

The syntax for this method is,

numpy.sort(ary, axis=-1, type='quicksort', order=None)

The parameters are,
ary : Array to be sorted.

axis : int or None, optional
Axis along which to sort. If None, the array is flattened before sorting. 
The default is -1, which sorts along the last axis.

type : {'quicksort', 'mergesort', 'heapsort'}, optional
Sorting algorithm. By default 'quicksort'.

order : list, optional
When ary is a structured array, this argument specifies which 
fields to compare first, second, and so on.
This list does not need to include all of the fields.
This method returns ndarray of the same size and shape in sorted order.

For example, simply sorting arrays in ascending order

import numpy as np

nums = np.array([16,11,22,12,16,42,17,55,12,12])
print(np.sort(nums))  

langs = np.array(['Python','Java','C','C++','Fortran','Pascal','Lisp']);
print(np.sort(langs))

bools = np.array([True, False,True, False])
print(np.sort(bools))

#Output
[11 12 12 12 16 16 17 22 42 55]
['C' 'C++' 'Fortran' 'Java' 'Lisp' 'Pascal' 'Python']
[False False  True  True]

Sorting a 2-D array


import numpy as np

nums=np.array([[16,11,22],[12,16,42],[17,55,12]])
sortednums=np.sort(nums, axis=1)
print('============X-Axis======\n',sortednums)  

sortednums=np.sort(nums, axis=None)
print('=========Flattens=======\n',sortednums)  

sortednums=np.sort(nums, axis=0)
print('=========Y-Axis=========\n',sortednums)  

#Output
============X-Axis======
 [[11 16 22]
 [12 16 42]
 [12 17 55]]
=========Flattens=======
 [11 12 12 16 16 17 22 42 55]
=========Y-Axis=========
 [[12 11 12]
 [16 16 22]
 [17 55 42]]

Sorting by defined order


We can specify the field name of the Numpy ndarray dtype by which we want to sort the array, against the order keyword in method, for customized sort operation. For example,

import numpy as np
dtype = [('name', 'S10'), ('height', float), ('age', int)]
values = [('Shiva', 1.8, 41), ('Akshar', 1.9, 38),
('Virat', 1.7, 38)]
a = np.array(values, dtype=dtype)  #create a structured array
#sort by name
print('by name===========\n',np.sort(a, order='name'))     
#sort by age
print('by age===========\n',np.sort(a, order='age'))    

#Output
by name===========
 [(b'Akshar', 1.9, 38) (b'Shiva', 1.8, 41) (b'Virat', 1.7, 38)]
by age===========
 [(b'Akshar', 1.9, 38) (b'Virat', 1.7, 38) (b'Shiva', 1.8, 41)]