numpy.argsort#

numpy.argsort(a, axis=-1, kind=None, order=None, *, stable=None)[原始碼]#

傳回會排序陣列的索引。

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

參數:
aarray_like

要排序的陣列。

axisint 或 None,選用

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

kind{‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, 選用

排序演算法。預設值為 ‘quicksort’。請注意,‘stable’ 和 ‘mergesort’ 都使用 timsort 作為底層實作,並且一般來說,實際實作會因資料類型而異。保留 ‘mergesort’ 選項是為了向後相容性。

orderstr 或 str 列表,選用

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

stablebool,選用

排序穩定性。如果 True,則傳回的陣列將保持比較相等的 a 值的相對順序。如果 FalseNone,則不保證這一點。在內部,此選項選擇 kind='stable'。預設值:None

2.0.0 版本新增。

傳回值:
index_arrayndarray,int

沿指定的 axis 排序 a 的索引陣列。如果 a 是一維的,則 a[index_array] 會產生排序後的 a。更一般地,np.take_along_axis(a, index_array, axis=axis) 始終產生排序後的 a,與維度無關。

另請參閱

sort

描述使用的排序演算法。

lexsort

具有多個鍵的間接穩定排序。

ndarray.sort

原地排序。

argpartition

間接部分排序。

take_along_axis

將 argsort 中的 index_array 應用於陣列,如同呼叫 sort 一樣。

註解

有關不同排序演算法的註解,請參閱 sort

從 NumPy 1.4.0 開始,argsort 可以處理包含 nan 值的實數/複數陣列。增強的排序順序記錄在 sort 中。

範例

一維陣列

>>> import numpy as np
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])

二維陣列

>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
       [2, 2]])
>>> ind = np.argsort(x, axis=0)  # sorts along first axis (down)
>>> ind
array([[0, 1],
       [1, 0]])
>>> np.take_along_axis(x, ind, axis=0)  # same as np.sort(x, axis=0)
array([[0, 2],
       [2, 3]])
>>> ind = np.argsort(x, axis=1)  # sorts along last axis (across)
>>> ind
array([[0, 1],
       [0, 1]])
>>> np.take_along_axis(x, ind, axis=1)  # same as np.sort(x, axis=1)
array([[0, 3],
       [2, 2]])

N 維陣列的排序元素索引

>>> ind = np.unravel_index(np.argsort(x, axis=None), x.shape)
>>> ind
(array([0, 1, 1, 0]), array([0, 0, 1, 1]))
>>> x[ind]  # same as np.sort(x, axis=None)
array([0, 2, 2, 3])

使用鍵排序

>>> x = np.array([(1, 0), (0, 1)], dtype=[('x', '<i4'), ('y', '<i4')])
>>> x
array([(1, 0), (0, 1)],
      dtype=[('x', '<i4'), ('y', '<i4')])
>>> np.argsort(x, order=('x','y'))
array([1, 0])
>>> np.argsort(x, order=('y','x'))
array([0, 1])