关于np.argpartition()那点事

关于np.argpartition()那点事

最近发现个np.argpartition()这东西,但是翻了好多博客还是看不明白,最后自己总结了很久很久,终于弄明白了这个函数

下面展示一些 内联代码片

import numpy as np
data=np.array([10,90,30,50,40,80,20,70,60])
#               0  1  2  3  4  5  6  7  8

#               0  6  2  4  3  8  7  5  1
k = 5
print(np.argpartition(data,k))

这个东西啥意思呢,我创建了一个数组,数组里是那些数据,然后吧,我把这个数组,按数值的大小进行了排序,注释的第一行是每个元素的下标,注释的第二行是按数值排序后的数组下标

啥意思呢?

就是说:10在数组中最小,然后它原本的下标是0,现在放在第二行注释的第一位

然后呢,第二小的是20,他原本的下标是6,所以把它的下标排在第二行的第二位,以此类推

上面代码的结果是:

[6 0 2 4 3 8 5 7 1]

打个不太恰当的比方

比如说:
有6个工人A,B,C,D,E,F
他们的老爹的名字分别是0,12,34,5 
不知道大家能不能理解,这两句话意思是:
工人A他爹的名字叫0,
工人B他爹的名字叫1,
工人C他爹的名字叫2

(工人是数组元素,老爹名字是数组元素对应的下标)
然后老板要奖励干活最优秀的几个人,奖励是把优秀工人他爹的名字贴在公告栏上

工人E天天干活,干的最快最好,老板很高兴,把工人E他老爹名字排在了公告栏第一位
[4,null,null,null......]                (假设这个框框[] 是公告栏,E的老爹4是第一个元素)
工人C也不赖,干活勤奋程度排在第二位,老板把C他老爹的名字排在了公告栏第二位
[4,2null,null......]
工人A稍微发了点懒,勤奋程度是所有工人中第三位,他的老爹排在公告栏第三位
[4,2,0,null.null......]

就这么一个个排,最后公告栏上的结果为:[4,2,0,1,5,3]

现在来了个陌生人,问老板:你们这里勤奋程度第二的工人他老爹叫啥?
老板拿出公告牌一看,嗷,他爹叫2

陌生人又问,勤奋程度排第四的工人他老爹叫啥,老板再一瞅,是1

这个人又又又问:那你告诉我一下勤奋程度第三,和比第三名还勤奋的人的老爹名字行不?
老板崩溃了,这嘛人呀?问个没完了
老板把前三名的人的老爹名字杂乱地写在了一张纸上,陌生人一看,嗷,是 ‘2’ ‘4’ ‘0’ 这三个名字啊,
但是咋没有顺序啊,谁在前谁在后呢?

老板:我不管排序,我只管告诉你前三名都是谁,行了行了哪凉快哪待着去吧,别来烦我了



这就是np.argpartition()干的事
定义了一个数组:
data=np.array([10,90,30,50,40,80,20,70,60])
里面的元素10就相当于工人A90相当于工人B30相当于工人C,依次类推
数组元素越小代表这个工人越勤奋

np.argpartition(data,k)

分开来看:先传入一个数组data,这个函数np.argpartition(data,)就生成了一个公告栏,
公告栏里各个数组下标按顺序排好,[0  6  2  4  3  8  7  5  1]
然后传入参数K,比如K=3
np.argpartition(data,3)           这个就是陌生人在问,勤奋程度第3和在他之前的人的老爹名字是什么
(当然后面的人名字也要加上) 
函数的结果是: [6 0 2 4 1 5 3 7 8]

这个结果的意思是,我传入的参数k=3,我想知道第三位的人是谁,所以结果的第三位和公告栏的第三位是一模一样的
前两位的位置是乱序的,6在第一位也行,0在第一位也行,后面几位也是乱序的

我只要保证第三位的下标是2,前面那俩数随便怎么换位置,第三位后面的数也可以随便换位置



水平有限,不喜勿喷(狗头保命)

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值