Python Numpy argsort奇怪索引
第一个输出是正确的。但不知何故,Python Numpy argsort奇怪索引,python,numpy,Python,Numpy,第一个输出是正确的。但不知何故,argsort为第二个数组提供了错误的输出: >>> np.argsort(np.array([ 0.62678927, 0.36816272, 0.31044763, 0.44873312, 0.3101446 ])) array([4, 2, 1, 3, 0]) >>> np.argsort(np.array([ 0.36816272, 0.62678927, 0.13509969, 0.54590815,
argsort
为第二个数组提供了错误的输出:
>>> np.argsort(np.array([ 0.62678927, 0.36816272, 0.31044763, 0.44873312, 0.3101446 ]))
array([4, 2, 1, 3, 0])
>>> np.argsort(np.array([ 0.36816272, 0.62678927, 0.13509969, 0.54590815, 0.13493432]))
array([4, 2, 0, 3, 1])
在花了2个小时之后,我确信这个问题要么太琐碎,要么太技术化。
我使用的是Anaconda虚拟环境,并用numpy 1.11.3和1.10.4对其进行了测试。看起来您的印象是
np.argsort(x)
返回一个数组,使得np.argsort(x)[I]
是x[I]
按排序顺序排列的地方。这不是它的工作原理
np.argsort(x)
返回一个数组,使得x[np.argsort(x)[i]]
按排序顺序进入位置i
。这就产生了
x[np.argsort(x)]
相当于
np.sort(x)
这恰好产生了与第一个数组预期的行为相同的结果,但第二个数组却没有。到底是什么问题?输出正确,为0.13493432<0.13509969<0.36816272<0.54590815<0.62678927。但结果似乎正确,您期望得到什么?感谢您的回答。但是我希望第二个命令返回
[2,4,1,3,0]
。由于0.6是最大值,因此它应该有一个与之关联的数字4
。我遗漏了什么?但这将是数组排序后的索引,但argsort
返回“将对数组排序的索引”(来源:)还要注意,您的预期结果与作为排列的np.argsort
的输出正好相反;也就是说,您可以通过s=np.argsort(a)
,s\u inv=np.empty(5)
,s\u inv[s]=np.arange(5)
获得预期结果。因此,非常不幸的是,在第一个例子中,s[s]
恰好是np.arange(5)
。