排名numpy数组怎么做?

时间:2018-01-31 05:06:30

标签: python arrays numpy

所以我有一系列排名(从scipy.stats.rankdata获得):

1 2 5 3 4

no.s是分配给相应指数的等级。现在我想把队伍向下移动2个位置。也就是说,我希望将排名前2位的指数分配到最后2位。因此,其他因素必须增加等级。

3 4 2 5 1

因此,排名前2位的指数,即index 2 and 4 having ranks 5 and 4被赋予最低2位2 and 1。其他元素随后增加。

如何为所有排名靠前n的排名实施此转变?

1 个答案:

答案 0 :(得分:1)

以这种方式:

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),高数字会回到低端。修改前-1将值向下移动1,因为模数将使用值0, 1, 2, ... len(ranks) - 1。修改后的+1会将等级恢复到范围1, 2, ..., len(ranks)