cjavapy编程之程

Python numpy.partition函数方法的使用

numpy.partition() 是 NumPy 中用于部分排序的一种高效方法,它可以将数组重新排列,使得指定的第 k 小元素处于正确位置,且比它小的元素都在它左边,比它大的都在右边,但左右两边元素的顺序不保证有序。本文主要介绍一下NumPy中partition方法的使用。

numpy.partition

numpy.partition(a, kth, axis=-1, kind='introselect', order=None)     [source]

返回数组的分区副本。

创建一个数组的副本,并对数组中的元素进行重新排列,使第k个位置上的元素的值在已排序的数组中所处的位置。所有小于第k个元素的元素都被移到这个元素前面,所有等于或大于这个元素的元素都被移到它后面。这两个分区中元素的顺序是未定义的。

1.8.0版中的新功能。

参数 :

a :array_like

要排序的数组。

kth :intint的sequence

分区依据的元素索引。 

元素的第k个值将处于其最终排序位置,

所有较小的元素将在其之前移动,

而所有相等或较大的元素将在其后面移动。 

分区中所有元素的顺序是不确定的。 

如果提供了第k个序列,

它将立即将所有按k个索引的元素划分到其排序位置。

axisintNone, 可选

要排序的轴。 如果为None,则在排序之前将数组展平。

 默认值为-1,它沿着最后一个轴排序。

kind{‘introselect’}, 可选

选择算法。 默认值为‘introselect’

或derstrstrlist, 可选

当a是一个定义了字段的数组时,

这个参数指定了第一个、第二个比较的字段,

等等。可以将单个字段指定为字符串。

并非所有字段都需要指定,

但仍将使用未指定字段,

按照它们在dtype中出现的顺序,以断开连接。

返回值 :

partitioned_arrayndarray

a具有相同类型和形状的数组。

Notes

各种选择算法的特征在于它们的平均速度,最差性能,工作空间大小以及它们是否稳定。 稳定的排序使具有相同键的项以相同的相对顺序保持。 可用算法具有以下属性:

httpswwwcjavapycom

沿着除最后一个轴以外的任何一个进行分区时,所有分区算法都会临时复制数据。 因此,与沿任何其他轴进行分区相比,沿最后一个轴进行分区速度更快且占用的空间更少。

复数的排序顺序是字典排序的。如果实部和虚部都是非nan,那么顺序由实部决定,除非它们相等,在这种情况下,顺序由虚部决定。

例子

1)一维数组中找第 2 小的数

import numpy as np

a = np.array([7, 2, 1, 5, 9])
parted = np.partition(a, 2)  # 找第 2 小的数(下标从 0 开始)
print(parted)

2)找前 3 小的元素

import numpy as np

a = np.array([9, 4, 1, 7, 3, 6])
# 把第 2 小的放到正确位置
result = np.partition(a, 2)  
# 取前 3 小
print(result[:3])  

3)在二维数组中按列部分排序

import numpy as np

a = np.array([[8, 4, 2],
              [7, 1, 3]])
parted = np.partition(a, 1, axis=0)
print(parted)

推荐阅读
cjavapy编程之路首页