如何在排名numpy数组中进行转换?

2024-06-28 19:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个列组数组(从scipy.stats.rankdata获得):

1 2 5 3 4

编号是分配给相应索引的等级。现在我想把队伍向下移动2个位置。也就是说,我希望排名前2位的索引被分配到最后2位。因此,其他要素的等级必须提高

3 4 2 5 1

因此,具有前2个等级即index 2 and 4 having ranks 5 and 4的索引被赋予了后2个等级2 and 1。其他元素的等级随后增加

我如何为任何顶级n实现这种转换


Tags: and元素indexstatsscipy数组顶级编号
1条回答
网友
1楼 · 发布于 2024-06-28 19:24:30

有一种方法:

In [19]: ranks = np.array([1, 2, 5, 3, 4])

In [20]: n = 2

In [21]: new_ranks = (ranks + n - 1) % len(ranks) + 1

In [22]: new_ranks
Out[22]: array([3, 4, 2, 5, 1])

通过将n添加到列组中并取结果模len(ranks),高的数字会环绕到低端。在moding之前的-1将值下移1,因为模将与值0, 1, 2, ... len(ranks) - 1一起工作。修改后的+1将等级恢复到范围1, 2, ..., len(ranks)

相关问题 更多 >