numpy.argsort
numpy.argsort(a, axis=-1, kind=None, order=None)
傳回将對數組進行排序的索引。
使用kind關鍵字指定的算法,沿着給定的軸執行間接排序。 它沿着給定的軸按排序順序傳回與該索引資料具有相同形狀的索引數組。
(傳回的隻是索引序列,原數組并沒有變)
參數:
a : array_like | 進行排序的數組 |
---|---|
axis : int or None, 可選 | 排序所依據的軸。 預設值為-1(最後一個軸)。 如果為None,則使用平鋪的數組。 |
kind : {‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, 可選 | 排序算法。 預設值為“quicksort”。 請注意,“stable”和“mergesort”在背景都使用了timsort,通常情況下,實際實作會因資料類型而異。 保留“ mergesort”選項是為了向後相容。 |
order : str or list of str, 可選 | 當a是定義了字段的數組時,此參數指定要比較第一個,第二個等的字段。可以将單個字段指定為字元串,并且不需要指定所有字段,但是仍将使用未指定的字段。 他們以dtype出現的順序打破關系。 |
傳回:
index_array : ndarray, int | 沿指定軸對排序的索引數組。 如果a是一維的,則a [index_array]産生排序的a。 更一般而言,np.take_along_axis(a,index_array,axis = axis)總是産生排序的a,而與維數無關。 |
---|
官網例子
一維數組
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0])
二維數組
>>> x = np.array([[0, 3], [2, 2]])
>>> ind = np.argsort(x, axis=0) # sorts along first axis (down)
>>> ind
array([[0, 1],
[1, 0]])
>>> ind = np.argsort(x, axis=1) # sorts along last axis (across)
>>> ind
array([[0, 1],
[0, 1]])
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])
類似用法
sort 使用的排序算法。
Lexsort 具有多個鍵的間接穩定排序。
ndarray.sort 就地排序。
argpartition 間接部分排序。