numpy.argpartition#

numpy.argpartition(a, kth, axis=-1, kind='introselect', order=None)[來源]#

使用 kind 關鍵字指定的演算法,沿著給定軸執行間接分割。它會傳回一個索引陣列,其形狀與 a 相同,該陣列會沿著給定軸以分割順序索引資料。

參數:
aarray_like

要排序的陣列。

kthint 或 int 序列

要分割的元素索引。第 k 個元素將位於其最終排序位置,所有較小元素將移到其前面,所有較大元素將移到其後面。分割區中所有元素的順序未定義。如果提供 k 個序列,它將一次將所有這些元素分割到其排序位置。

版本 1.22.0 已棄用:不建議將布林值作為索引傳遞。

axisint 或 None,選用

要沿著排序的軸。預設值為 -1(最後一個軸)。如果為 None,則使用扁平化陣列。

kind{‘introselect’},選用

選擇演算法。預設值為 ‘introselect’

orderstr 或 str 列表,選用

a 是具有定義欄位的陣列時,此引數指定要先比較哪些欄位,依序第二個、等等。單一欄位可以指定為字串,並非所有欄位都需要指定,但未指定的欄位仍將使用,按照它們在 dtype 中出現的順序來打破平局。

傳回值:
index_arrayndarray,int

索引陣列,沿著指定的軸分割 a。如果 a 是一維的,則 a[index_array] 會產生分割的 a。更一般而言,np.take_along_axis(a, index_array, axis=axis) 始終產生分割的 a,與維度無關。

另請參閱

partition

描述使用的分割演算法。

ndarray.partition

原地分割。

argsort

完整間接排序。

take_along_axis

將來自 argpartition 的 index_array 應用於陣列,如同呼叫 partition 一樣。

註解

不保證傳回的索引會根據值排序。此外,預設選擇演算法 introselect 是不穩定的,因此不保證傳回的索引是元素最早/最晚出現的索引。

argpartition 適用於具有 nan 值的實數/複數輸入,請參閱 partition 以取得關於增強排序順序和不同選擇演算法的註解。

範例

一維陣列

>>> import numpy as np
>>> x = np.array([3, 4, 2, 1])
>>> x[np.argpartition(x, 3)]
array([2, 1, 3, 4]) # may vary
>>> x[np.argpartition(x, (1, 3))]
array([1, 2, 3, 4]) # may vary
>>> x = [3, 4, 2, 1]
>>> np.array(x)[np.argpartition(x, 3)]
array([2, 1, 3, 4]) # may vary

多維陣列

>>> x = np.array([[3, 4, 2], [1, 3, 1]])
>>> index_array = np.argpartition(x, kth=1, axis=-1)
>>> # below is the same as np.partition(x, kth=1)
>>> np.take_along_axis(x, index_array, axis=-1)
array([[2, 3, 4],
       [1, 1, 3]])