當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python NumPy argsort方法用法及代碼示例

Numpy 的 argsort(~) 方法返回輸入數組的排序副本的整數索引。

參數

1. a | array_like

輸入數組。

2. axis | int | optional

對輸入數組進行排序的軸。對於二維數組,允許的值如下:

意義

None

展平數組並對其進行排序

0

按列排序

1

按行排序

默認情況下,axis=-1 表示僅在最後一個軸上進行排序。對於二維數組,這意味著默認排序行為是按行排序。

3. kind | string | optional

要使用的排序算法。目前,Numpy 提供以下選擇:

種類

速度

最壞的情況下

memory

穩定的

quicksort

1(快)

O(n^2)

0

no

mergesort

2

O(nlogn)

~n/2

yes

timsort

2

O(nlogn)

~n/2

yes

heapsort

3(慢)

O(nlogn)

0

no

"stable" 的排序算法保留重複值的相對順序。例如,假設您要按每個元組的第一個元素對數組 [(2,3), (2,2), (4,5)] 進行排序。我們這裏有一個重複值 2,因此穩定的排序算法確保 (2,3) 始終位於 (2,2) 之前,因為這就是它們最初的排序方式。不穩定的搜索不能保證保留此類順序。

默認情況下,kind="quicksort"

警告

數據類型決定使用歸並排序還是時間排序

盡管您可以指定 mergesort 或 timsort,Numpy 最終將根據數組的數據類型做出決定。目前無法強製您在兩者之間選擇算法。

注意

Timsort 為排序或接近排序的數組提供最佳性能

Timsort 是 Numpy(版本 1.17)中添加的最新搜索算法。對於隨機排列的數字,Timsort 仍然幾乎與歸並排序一樣高效。

4. order | stringliststrings | optional

排序依據的字段。這僅適用於結構化數組 - 請參閱下麵的示例以進行說明。

返回值

一個 Numpy 數組,包含輸入數組的排序副本的索引。

例子

對一維數組進行排序

x = np.array([7,5,8,6])
np.sort(x)



array([1, 3, 0, 2])

對二維數組進行排序

假設我們有以下二維數組:

x = np.array([[7,5],[8,6]])
x



array([[7, 5],
       [8, 6]])
對展平的數組進行排序
np.argsort(x, axis=None)



array([1, 3, 0, 2])
按行排序
np.argsort(x)      # or explicitly set axis=1



array([[1, 0],
       [1, 0]])
按列排序
np.argsort(x, axis=0)



array([[0, 0],
       [1, 1]])

指定結構化數組的順序

假設我們有以下結構化數組:

dtype = [('name', 'S15'), ('age', int)]
values = [('Bob', 35), ('Alex', 15),('Cathy', 24)]
x = np.array(values, dtype)
x



array([(b'Bob', 35), (b'Alex', 15), (b'Cathy', 24)],
        dtype=[('name', 'S15'), ('age', '<i8')])

我們的數組 x 由三個元組組成,第一個元素為 name ,第二個元素為 age

name 排序:

np.argsort(x, order="name")



array([1, 0, 2])

這裏返回的數組包含元組的原始索引 AlexBobCathy

age 排序:

np.argsort(x, order="age")



array([1, 2, 0])

這裏返回的數組包含年齡為 15、24 和 35 的元組的原始索引。

您還可以傳入要排序的標簽數組(例如 order=["name", "age"] ),這將首先按 name 對數組進行排序,然後按 age 進行排序。

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 NumPy | argsort method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。