2017-01-12 106 views
-3

第一个输出是正确的。但不知何故,argsort给出了第二阵列输出错误: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, 0.13493432])) 
array([4, 2, 0, 3, 1]) 

在花费2小时后,我相信,这个问题是不是太微不足道或过于技术。 我使用蟒蛇虚拟环境,并与numpy的1.11.3和1.10.4

+1

究竟是什么问题?输出正确为0.13493432 <0.13509969 <0.36816272 <0.54590815 <0.62678927。 – fuglede

+0

但结果似乎是正确的,你期望什么? – MSeifert

+0

感谢您的回复。但我期待第二个命令返回'[2,4,1,3,0]'。由于0.6是最大的,它应该有一个与其相关的数字“4”。我错过了什么? – govind

回答

0

它看起来像你的印象是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) 

这正好产生相同的结果如你预期的第一阵列的行为,而不是第二。