numpy.partition的用法

本文深入解析了numpy中的np.partition函数,通过实例演示了如何使用该函数快速查找数组中的第k个最值,包括按列排序并分区的过程,以及如何选取每一列第二小或第二大的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能

np.partition的工作流程可以看做是先对数组排序(升序),然后以索引是i的元素为基准,将元素分成两部分,即大于该元素的放在其后面,小于该元素的放在其前面,这里有点类似于快排,具体看下面的类子:

import numpy as np
result = np.random.randint(1, 13,(6,4))
print(result)
result1 = np.sort(result,axis=0)
print(result1)
result2 = np.partition(result, kth=2, axis=0)
print(result2)

这里我们是按列(axis=0)进行的排序

为了验证我们的想法先对原始二维数组进行排序得到result1

然后以每一列索引为2即第3个元素进行基准将每一列划分为两部分

比如第一列排序后的第三个元素是7,那么大于它的都放在了其后面,小于其的都放在了其前面

同理第二列排序后的第三个元素是8

第三列排序后的第三个元素是3等等

还有一个问题需要注意的就是放在其后或其前的数组是无序的如第一列的10,10,8

它通常的应用是找出最值

假设现在我们找每一列第二小的数,我们就可以这么做:

import numpy as np
result = np.random.randint(1, 13,(6,4))
print(result)
result1 = np.sort(result,axis=0)
print(result1)
result2 = np.partition(result, kth=1, axis=0)[1]
print(result2)

当然啦,其没有考虑去重的情况,即比如第二列按说只有2,4,6,11,12这几种数据,第二小的数据是4

同理我们还可以选取每一列第二大的数据:

import numpy as np
result = np.random.randint(1, 13,(6,4))
print(result)
result1 = np.sort(result,axis=0)
print(result1)
result2 = np.partition(result, kth=-2, axis=0)[-2]
print(result2)

为什么

为什么找第K个最值要这么做呢?原因就是该方法比较快,numpy.partition内部其实并不是先对数组进行排序的,而是只考虑第K个最值,而不管其前后数组的顺序,所以比较快,有兴趣的可以看一下源码,总之找k最值,这是一个可选的方案吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值