numpy.argpartition
numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None) [source]
使用kind关键字指定的算法,沿给定轴执行间接分区。 它沿着给定的轴按分区顺序返回与该索引数据具有相同形状的索引数组。
1.8.0版中的新功能。
参数 : | a :array_like 数组进行排序。 kth :int 或 int类型的sequence 分区依据的元素索引。 第k个元素将处于其最终排序位置, 所有较小的元素将在其之前移动,而所有较大的元素将在其后面移动。 分区中所有元素的顺序是不确定的。 如果提供第k个序列,它将立即将它们全部划分到其排序位置。 axis : 要排序的轴。 默认值为-1(最后一个轴)。 如果为None,则使用展平的数组。 kind : 选择算法。 默认值为 或der :str 或 str的类型list, 可选 当a是定义了字段的数组时,此参数指定要比较的字段的第一个, 第二个等。单个字段可以指定为字符串,并且不需要指定所有字段, 但是仍将使用未指定的字段。 他们以dtype出现的顺序来打破关系。 |
返回值 : | index_array :ndarray, int 沿指定轴划分a的索引数组。 如果a是一维的, 则
总是产生分区a,而与维数无关。 |
例子
一维数组:
>>> x = np.array([3, 4, 2, 1])
>>> x[np.argpartition(x, 3)]
array([2, 1, 3, 4])
>>> x[np.argpartition(x, (1, 3))]
array([1, 2, 3, 4])
>>> x = [3, 4, 2, 1]
>>> np.array(x)[np.argpartition(x, 3)]
array([2, 1, 3, 4])
多维数组:
>>> x = np.array([[3, 4, 2], [1, 3, 1]])
>>> index_array = np.argpartition(x, kth=1, axis=-1)
>>> np.take_along_axis(x, index_array, axis=-1) # same as np.partition(x, kth=1)
array([[2, 3, 4],
[1, 1, 3]])
列表排序:
>>> import numpy as np
>>> a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> print(np.argpartition(a, 4))
>>> [6 9 4 3 7 2 1 5 8 0]
>>> a[np.argpartition(a, 4)]
>>> array([0, 0, 3, 3, 4, 4, 4, 9, 6, 9])
取列表中前5个元素 :
>>> import numpy as np
>>> a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> a[np.argpartition(a, -5)[-5:]]
>>> array([4, 4, 9, 6, 9])