python - 获取 numpy 数组中 N 个最大值的索引,并随机打破平局

标签 python numpy

我试图获取 numpy 数组中的前 N ​​个最大值,如果值相等,则进行随机平局。

我可以按如下方式获取前 N 个最大值(取自 here ),但此代码始终返回第一个“4”(即索引 1)。有没有办法让它在4s中随机选择?

>>> a
array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> ind = np.argpartition(a, -4)[-4:]
>>> ind
array([1, 5, 8, 0])

最佳答案

您可以在排序之前随机化顺序,然后重新应用相同的排列:

In [11]: p = np.random.permutation(len(a))

In [12]: p[np.argpartition(a[p], -4)[-4:]]
Out[12]: array([7, 8, 0, 5])

注意:如果我们再次运行它,我们可能会得到另一个解决方案:

In [13]: p = np.random.permutation(len(a))

In [14]: p[np.argpartition(a[p], -4)[-4:]]
Out[14]: array([1, 8, 0, 5])

关于python - 获取 numpy 数组中 N 个最大值的索引,并随机打破平局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997024/

相关文章:

python - 如何 "scale"一个 numpy 数组?

python - SUID(Set-User-ID)的语义

python - 在 scipy 中计算稀疏矩阵的列之间的相关性时如何忽略零

python - 如何通过在 NumPy 中使用切片来反转二维矩阵的值?

python - 在 numpy 中混合数组的最快方法?

python - sklearn 中的 StandardScaler 无法正确拟合,是吗?

python - scikit 学习中断 pandas 安装

python - 如何进行张量变换并保留梯度?

python - 带点线或虚线的 opencv 多边形

python - 折叠 numpy 数组尾随维度的简单方法?