numpy.partition的用法

功能

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最值,这是一个可选的方案吧

NumPy中最基本的数据类型是`ndarray`,即N维数组,它除了可以存储多维数组外,还提供了丰富的属性和方法,方便对数组进行各种操作。下面列举了`ndarray`的常用属性和方法: **属性:** 1. `ndarray.shape`:表示数组的形状(即每个维度的大小),返回一个元组。 2. `ndarray.ndim`:表示数组的维度数。 3. `ndarray.size`:表示数组中元素的总个数。 4. `ndarray.dtype`:表示数组元素的数据类型。 5. `ndarray.itemsize`:表示数组中每个元素的字节大小。 6. `ndarray.data`:包含实际数组元素的缓冲区。 **方法:** 1. 数组创建 - `np.array()`:从列表、元组等序列对象创建数组。 - `np.zeros()`:创建全零数组。 - `np.ones()`:创建全一数组。 - `np.empty()`:创建空数组。 - `np.arange()`:创建一维数组,类似于Python的range函数。 - `np.linspace()`:创建指定范围内的等间隔一维数组。 - `np.eye()`:创建单位矩阵或者说对角线上元素为1的矩阵。 2. 数组操作 - 索引和切片:与Python中的列表类似,可以使用索引和切片来访问数组元素。 - 数组形状变换:`reshape()`、`resize()`、`transpose()`、`flatten()`等方法可以改变数组的形状。 - 数组连接:`concatenate()`、`stack()`、`hstack()`、`vstack()`等方法可以实现数组的连接操作。 - 数组拆分:`split()`、`hsplit()`、`vsplit()`等方法可以实现数组的拆分操作。 3. 数组计算 - 数组运算:支持加、减、乘、除、幂运算等基本算术运算。 - 通用函数:支持绝对值、三角函数、指数和对数函数等各种通用函数。 - 统计函数:支持计算数组的平均值、标准差、方差、最大值、最小值等统计函数。 4. 数组排序 - `sort()`、`argsort()`、`lexsort()`、`partition()`等方法可以实现数组的排序操作。 5. 数组文件读写 - `save()`、`savez()`、`load()`等函数可以实现NumPy数组的文件读写操作。 以上是`ndarray`的常用属性和方法,掌握这些属性和方法可以方便地对数组进行各种操作,实现各种数学和科学计算任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值