第一个输出是正确的。但不知怎的,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进行测试
答案 0 :(得分: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)
这会产生与第一个数组所期望的行为相同的结果,但不会产生第二个数组的结果。