本文簡要介紹 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’ 目前根據數據類型映射到 timsort 或 radix 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')])
相關用法
- Python numpy sort_complex用法及代碼示例
- Python numpy source用法及代碼示例
- Python numpy searchsorted用法及代碼示例
- Python numpy shape用法及代碼示例
- Python numpy scimath.log用法及代碼示例
- Python numpy signbit用法及代碼示例
- Python numpy setdiff1d用法及代碼示例
- Python numpy seterr用法及代碼示例
- Python numpy scimath.logn用法及代碼示例
- Python numpy square用法及代碼示例
- Python numpy std用法及代碼示例
- Python numpy scimath.log2用法及代碼示例
- Python numpy sum用法及代碼示例
- Python numpy spacing用法及代碼示例
- Python numpy seterrobj用法及代碼示例
- Python numpy squeeze用法及代碼示例
- Python numpy scimath.arccos用法及代碼示例
- Python numpy shares_memory用法及代碼示例
- Python numpy s_用法及代碼示例
- Python numpy swapaxes用法及代碼示例
- Python numpy sctype2char用法及代碼示例
- Python numpy show_config用法及代碼示例
- Python numpy set_printoptions用法及代碼示例
- Python numpy save用法及代碼示例
- Python numpy scimath.log10用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.sort。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。