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


Python numpy sort用法及代碼示例


本文簡要介紹 python 語言中 numpy.sort 的用法。

用法:

numpy.sort(a, axis=- 1, kind=None, order=None)

返回數組的排序副本。

參數

a array_like

要排序的數組。

axis int 或無,可選

要排序的軸。如果為 None,則數組在排序前被展平。默認值為 -1,沿最後一個軸排序。

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

排序算法。默認值為‘quicksort’。請注意,‘stable’ 和 ‘mergesort’ 都在後台使用 timsort 或 radix sort,通常,實際實現會因數據類型而異。保留 ‘mergesort’ 選項是為了向後兼容。

order str 或 str 列表,可選

當 a 是定義了字段的數組時,此參數指定首先比較哪些字段,第二個等。單個字段可以指定為字符串,不需要指定所有字段,但仍會使用未指定的字段,在他們在 dtype 中出現的順序,以打破關係。

返回

sorted_array ndarray

與 a 具有相同類型和形狀的數組。

注意

各種排序算法的特點是它們的平均速度、最壞情況下的性能、工作空間大小以及它們是否穩定。穩定的排序使具有相同鍵的項目保持相同的相對順序。 NumPy 中實現的四種算法具有以下屬性:

種類

速度

最差的情況

工作空間

穩定的

‘quicksort’

1

O(n^2)

0

no

‘heapsort’

3

O(n*log(n))

0

no

‘mergesort’

2

O(n*log(n))

~n/2

yes

‘timsort’

2

O(n*log(n))

~n/2

yes

注意

數據類型確定實際使用的是‘mergesort’ 還是‘timsort’,即使指定了‘mergesort’。當前不提供更精細的用戶選擇。

當沿除最後一個軸之外的任何軸進行排序時,所有排序算法都會臨時複製數據。因此,沿最後一個軸排序比沿任何其他軸排序更快且占用更少空間。

複數的排序順序是字典順序。如果實部和虛部都不是nan,則順序由實部確定,除非它們相等,在這種情況下,順序由虛部確定。

在 numpy 1.4.0 之前,對包含 nan 值的實數和複數數組進行排序會導致未定義的行為。在 numpy 版本中 >= 1.4.0 nan 值被排序到最後。擴展排序順序為:

  • 真實:[R,南]

  • 複合物:[R + Rj,R + nanj,nan + Rj,nan + nanj]

其中 R 是一個非 nan 實數值。具有相同 nan 位置的複雜值根據 non-nan 部分(如果存在)進行排序。非 nan 值像以前一樣排序。

快速排序已更改為 introsort 。當排序沒有取得足夠的進展時,它會切換到 heapsort 。此實現在最壞的情況下使快速排序 O(n*log(n))。

‘stable’ 自動為被排序的數據類型選擇最穩定的排序算法。它與 ‘mergesort’ 目前根據數據類型映射到 timsortradix sort。 API 前向兼容性目前限製了選擇實現的能力,並且對於不同的數據類型是硬連線的。

添加 Timsort 是為了在已經排序或接近排序的數據上獲得更好的性能。對於隨機數據,timsort 與 mergesort 幾乎相同。它現在用於穩定排序,而如果未選擇快速排序,則快速排序仍然是默認排序。有關 timsort 的詳細信息,請參閱 CPython listsort.txt 。 ‘mergesort’ 和 ‘stable’ 映射到整數數據類型的基數排序。基數排序是 O(n) 排序,而不是 O(n log n)。

NaT 現在排序到數組末尾以與 NaN 保持一致。

例子

>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a)                # sort along the last axis
array([[1, 4],
       [1, 3]])
>>> np.sort(a, axis=None)     # sort the flattened array
array([1, 1, 3, 4])
>>> np.sort(a, axis=0)        # sort along the first axis
array([[1, 1],
       [3, 4]])

使用 order 關鍵字指定在對結構化數組進行排序時要使用的字段:

>>> dtype = [('name', 'S10'), ('height', float), ('age', int)]
>>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),
...           ('Galahad', 1.7, 38)]
>>> a = np.array(values, dtype=dtype)       # create a structured array
>>> np.sort(a, order='height')                        
array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),
       ('Lancelot', 1.8999999999999999, 38)],
      dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

按年齡排序,如果年齡相等,則按身高排序:

>>> np.sort(a, order=['age', 'height'])               
array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38),
       ('Arthur', 1.8, 41)],
      dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

相關用法


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