Numpyargsort-发生了什么?
我有一个名为arr1的 numpy 数组,定义如下。
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)
我希望数组的所有索引都按数字顺序排列,但索引 8 和 9 似乎已翻转。
有人可以帮助解释为什么会这样吗?
回答
np.argsort默认情况下使用不稳定的快速排序算法。您可以指定kind = "stable"执行稳定排序,这将保留相等元素的顺序:
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"))
它给:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17]