我有一个numpy数组,其中某些元素与其他元素相同,即存在联系,并且我应用np.argsort
来查找将对数组进行排序的索引:
In [29]: x = [1, 2, 1, 1, 5, 2]
In [30]: np.argsort(x)
Out[30]: array([0, 2, 3, 1, 5, 4])
In [31]: np.argsort(x)
Out[31]: array([0, 2, 3, 1, 5, 4])
从这里可以看出,两次运行argsort
所获得的输出是相同的。但是,array([2, 3, 0, 5, 1, 4])
也是完全有效的输出,因为原始数组中的某些元素相等。当数组中有联系时,我可以使argsort返回此类“随机”输出吗?如果不是,那是一种解决方法,因为在选择它们时,我不想偏向于选择数组中的最小值。
答案 0 :(得分:3)
一种技巧是在[0,1)
范围内添加均匀噪声,然后执行argsorting。添加这样的噪声会强制仅在它们各自的容器中进行排序,并给出仅限于这些容器的随机排序索引-
(x+np.random.rand(len(x))).argsort()