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
值的相對順序。如果False
或None
,則不保證這一點。在內部,此選項選擇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])