Numpy 的 sort(~)
方法返回輸入數組的排序副本。請注意,原始數組保持不變。
參數
1. a
| array_like
輸入數組。
2. axis
| int
| optional
對輸入數組進行排序的軸。對於二維數組,允許的值如下:
值 |
意義 |
---|---|
|
展平數組並對其進行排序 |
|
按列排序 |
|
按行排序 |
默認情況下,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,1), (4,5)] 進行排序。我們這裏有一個重複值 2,因此穩定的排序算法確保 (2,3) 始終位於 (2,1) 之前,因為這就是它們最初的排序方式。不穩定的搜索不能保證保留此類順序。
默認情況下,kind="quicksort"
。
警告
數據類型決定使用歸並排序還是時間排序
盡管您可以指定 mergesort 或 timsort,Numpy 最終將根據數組的數據類型做出決定。目前無法強製您在兩者之間選擇算法。
注意
Timsort 為排序或接近排序的數組提供最佳性能
Timsort 是 Numpy(版本 1.17)中添加的最新搜索算法。對於隨機排列的數字,Timsort 仍然幾乎與歸並排序一樣高效。
4. order
| string
或list
或strings
| optional
排序依據的字段。這僅適用於結構化數組 - 請參閱下麵的示例以進行說明。
返回值
一個 Numpy 數組,它是輸入數組的排序副本。
例子
對一維數組進行排序
x = np.array([1,4,2,3])
np.sort(x)
array([1, 2, 3, 4])
對二維數組進行排序
假設我們有以下二維數組:
x = np.array([[1,4],[3,2]])
x
array([[1, 4],
[3, 2]])
對展平的數組進行排序
np.sort(x, axis=None)
array([1, 2, 3, 4])
按行排序
np.sort(x) # or explicitly set axis=1
array([[1, 4],
[2, 3]])
按列排序
np.sort(x, axis=0)
array([[1, 2],
[3, 4]])
指定結構化數組的順序
假設我們有以下結構化數組:
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.sort(x, order="name")
array([(b'Alex', 15), (b'Bob', 35), (b'Cathy', 24)],
dtype=[('name', 'S15'), ('age', '<i8')])
請注意元組如何按名稱排序: Alex
、 Bob
和 Cathy
。
按 age
排序:
np.sort(x, order="age")
array([(b'Bob', 15), (b'Cathy', 24), (b'Alex', 35)],
dtype=[('name', 'S15'), ('age', '<i8')])
請注意元組如何按年齡排序:15、24,然後是 35。
您還可以傳入要排序的標簽數組(例如 order=["name", "age"]
),這將首先按 name
對數組進行排序,然後按 age
進行排序。
相關用法
- Python sorted()用法及代碼示例
- Python sorted方法用法及代碼示例
- Python sort()用法及代碼示例
- Python sorted()和sort()用法及代碼示例
- Python socket.create_server用法及代碼示例
- Python socket.socket.sendmsg用法及代碼示例
- Python socket.socket.recvmsg_into用法及代碼示例
- Python socket.socket.recvmsg用法及代碼示例
- Python socket.getaddrinfo用法及代碼示例
- Python sklearn.cluster.MiniBatchKMeans用法及代碼示例
- Python NumPy squeeze方法用法及代碼示例
- Python scipy.ndimage.binary_opening用法及代碼示例
- Python scipy.signal.windows.tukey用法及代碼示例
- Python scipy.stats.mood用法及代碼示例
- Python str.isidentifier用法及代碼示例
- Python sklearn.metrics.fbeta_score用法及代碼示例
- Python scipy.fft.ihfftn用法及代碼示例
- Python scipy.stats.normaltest用法及代碼示例
- Python scipy.ndimage.convolve1d用法及代碼示例
- Python scipy.stats.arcsine用法及代碼示例
- Python scipy.interpolate.UnivariateSpline.antiderivative用法及代碼示例
- Python NumPy sign方法用法及代碼示例
- Python scipy.linalg.hadamard用法及代碼示例
- Python sklearn.linear_model.PassiveAggressiveRegressor用法及代碼示例
- Python skimage.feature.graycomatrix用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 NumPy | sort method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。