NumPy | lexsort method
Start your free 7-days trial now!
Numpy's lexsort(~)
method returns the sorted integer indices of multiple input arrays that correspond to column data. See the examples below for clarification.
Parameters
1. keys
| array_like
of sequences
The keys you want sorted.
2. axis
| 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.
Return value
A Numpy array that holds the integer indices of the sorted columns.
Examples
Suppose we have the following data about 3 people:
First name | Last name |
---|---|
Bob | Marley |
Alex | Davis |
Cathy | Watson |
In code, this translates to the following:
first_names = np.array(["Bob", "Alex", "Cathy"])last_names = np.array(["Marley", "Davis", "Watson"])
What is important here is that our data is split by columns - we don't have a single array that houses all our data.
Sorting by a single column
To sort by a single column, say first name:
first_names = np.array(["Bob", "Alex", "Cathy"])last_names = np.array(["Marley", "Davis", "Watson"])sorted_indices = np.lexsort([first_names])sorted_indices
array([1, 0, 2])
What is returned here is a list of indices of the sorted data - ["Alex Davis", "Bob Marley", "Cathy Watson"]
have original indices of 1, 0 and 2 respectively.
To see the sorted data:
for i in sorted_indices: print(first_names[i] + " " + last_names[i])
Alex DavisBob MarleyCathy Watson
Sorting by multiple columns
To sort by multiple columns:
first_names = np.array(["Bob", "Alex", "Alex"])last_names = np.array(["Marley", "Davis", "Beck"])sorted_indices = np.lexsort([first_names, last_names])sorted_indices
array([2, 1, 0])
Here, our first key (i.e. first_names) have duplicate values, so for those values, they are sorted by their last name - this is why Alex Beck comes before Alex Davis.
To see the sorted data:
for i in sorted_indices: print(first_names[i] + " " + last_names[i])
Alex BeckAlex DavisBob Marley