How does this function work?
import numpy as np
first_names = (5,5,5)
last_names = (3,1,2)
x = np.lexsort((first_names, last_names))
print(x)
It gives output [1 2 0] . I assume that the two lists are sorted by the variable last_names. If so, how can number 2 have index 0. 2 is between 1 and 3, so I don't understand how this sorting works. please explain.
Essentially, np.lexsort((first_names, last_names)) says : sort by last_name first, then sort by first_name
Reading the documentation, and particularly the example located under "Sort two columns of numbers:", reveals a lot. Essentially, you are first sorting by last_name, which reorders that so that index 1 (whose value is 1) is first, index 2 (whose value is 2) is second, and index 0 (whose value is 3) is third. With this order, the sorted last_name ends up as (1,2,3), i.e. it is sorted. Then, if there were any ties, the corresponding indices in first_name would be the tie breaker.
For example, consider this case:
first_names = (5,5,4)
last_names = (3,1,1)
There is a tie between index 1 and 2 in last_name (they both have the value 1), which will be broken by their corresponding indices in first_name. At indices 1 and 2 of first_name, index 2 (value 4) is lower than index 1 (value 5), so it will come first. So, the resulting lexsort will be [2,1,0]:
np.lexsort((first_names, last_names))
# array([2, 1, 0])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With