Kosu K.
Kosu K.

Reputation: 75

Numpy argsort - what is happening?

I have a numpy array called arr1 defined like following.

arr1 = np.array([1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9])
print(arr1.argsort())

array([ 0,  1,  2,  3,  4,  5,  6,  7,  9,  8, 10, 11, 12, 13, 14, 15, 16,
        17], dtype=int64)

I expected all the indices of the array to be in numeric order but indices 8 and 9 seems to have flipped.

Can someone help on why this is happening?

Upvotes: 1

Views: 257

Answers (2)

bb1
bb1

Reputation: 7863

np.argsort by default uses the quicksort algorithm which is not stable. You can specify kind = "stable" to perform a stable sort, which will preserve the order of equal elements:

import numpy as np 

arr1 = np.array([1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9])
print(arr1.argsort(kind="stable"))

It gives:

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17]

Upvotes: 5

Jurca Bg
Jurca Bg

Reputation: 27

Because it will sort according to the quick sort algorithm if you follow the steps you will see that is why they are flipped. https://numpy.org/doc/stable/reference/generated/numpy.argsort.html

Upvotes: 1

Related Questions