python - 为数组中的元素创建等级
问题描述
所以这里是问题:
为给定的数值数组 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())
但我不明白为什么它会起作用。
解决方案
当随机种子定义为 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()
被应用时,这个隐含的信息就会出现。它生成一个数组,显示原始数组中每个元素的排名。
推荐阅读
- python - 用值列表替换字典值
- java - 如何微调 JVM 配置以减少最大线程堆栈大小?
- visual-studio-code - vscode 远程容器扩展启动卡在“安装扩展”
- python - 生成随机域名的最佳方式
- python - 如何遍历列表并有条件地合并一些短语?
- sql - PostgreSQL按列分组
- mysql - hasMany() 关联不能在 Squelize.js 中定义?
- tensorflow - 这些列表必须采用什么格式才能被 Keras Tuners 搜索功能接受?
- amazon-s3 - S3 - 如果文件在 X 天前被删除,是否删除所有以前的版本?
- python - 在 Python 中进行单元测试时如何模拟依赖项的响应