首页 > 解决方案 > 为数组中的元素创建等级

问题描述

所以这里是问题:

为给定的数值数组 a 创建等级。提示:你可以使用np.rank()方法

# Input
#> [ 9  4 15  0 17 16 17  8  9  0]

# Output

#> [4 2 6 0 8 7 9 3 5 1]

我找到了这个解决方案

import numpy as np
np.random.seed(10)
a = np.random.randint(20, size=10)
print(a.argsort().argsort())

但我不明白为什么它会起作用。

标签: pythonarraysnumpy

解决方案


当随机种子定义为 10 时,随机整数函数返回原始输入数组。argsort()函数返回一个索引数组,按升序排列原始数组。所以当argsort()只执行一次它返回以下输出。

print(a.argsort())
[3 9 1 7 0 8 2 5 4 6]

此列表显示用于对原始数组进行排序的元素索引。当您选择元素作为a.argsort()函数显示时,您将获得原始数组的排序版本,如下所示。

print(a[3], a[9], a[1], a[7], a[0], a[8], a[2], a[5], a[4], a[6])
0 0 4 8 9 9 15 16 17 17

argsort()函数应用于辅助数组[3 9 1 7 0 8 2 5 4 6]时,它将显示每个元素的排名。

例如,在原始数组中,第一个元素是 9。当您argsort()第一次应用时,它将该元素的索引(即 0)放在索引为 4 的位置。因为它是原始数组中第 5 个最小的元素。当您argsort()再次申请时,将生成最终输出。该元素成为最终输出的第一个元素,因为辅助数组存储了它的索引。它的值将是 4,因为它在辅助数组中的索引是 4。

总而言之,二级数组的值显示元素的索引以对原始数组进行排序。同时,它的顺序隐含地显示了原始数组中每个元素的排名。当第二个argsort()被应用时,这个隐含的信息就会出现。它生成一个数组,显示原始数组中每个元素的排名。


推荐阅读