【发布时间】:2017-01-12 21:07:46
【问题描述】:
第一个输出是正确的。但不知何故,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.13493432
-
但结果似乎是正确的,你期待什么?
-
感谢您的回复。但我期待第二个命令返回
[2, 4, 1, 3, 0]。由于 0.6 是最大的,它应该有一个数字4与之关联。我错过了什么? -
但这将是数组排序后的索引,但
argsort返回“对数组进行排序的索引”(来源:argsort documentation) -
另请注意,您的预期结果与
np.argsort输出的倒数完全相反;也就是说,你可以通过s = np.argsort(a)、s_inv = np.empty(5)、s_inv[s] = np.arange(5)得到你想要的结果。因此很不幸,在您的第一种情况下,s[s]恰好是np.arange(5)。