我有一个numpy数组:
foo = array([3, 1, 4, 0, 1, 0])
我希望得到前三个项目。调用:
foo.argsort()[::-1][:3]
返回
array([2, 0, 4])
注意,值
foo[1]
和 foo[4]
相等,因此numpy.argsort()
通过返回在数组中最后出现的项目的索引来处理平局;即索引为 4。对于我的应用程序,我不能让平局总是偏向数组的末尾,那么如何实现随机平局?也就是说,一半的时间我会得到
array([2, 0, 4])
,另一半时间我会得到array([2, 0, 1])
。
lexsort
或为每个值添加随机值来解决问题,参见如何使argsort结果在相等的值之间随机? - Eric Tsuinumpy.lexsort((numpy.random.random(foo.size), foo))[::-1][:3]
。 - BoltzmannBrain