Numpy 的 argsort(~) 方法返回輸入數組的排序副本的整數索引。
參數
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,2), (4,5)] 進行排序。我們這裏有一個重複值 2,因此穩定的排序算法確保 (2,3) 始終位於 (2,2) 之前,因為這就是它們最初的排序方式。不穩定的搜索不能保證保留此類順序。
默認情況下,kind="quicksort" 。
警告
數據類型決定使用歸並排序還是時間排序
盡管您可以指定 mergesort 或 timsort,Numpy 最終將根據數組的數據類型做出決定。目前無法強製您在兩者之間選擇算法。
注意
Timsort 為排序或接近排序的數組提供最佳性能
Timsort 是 Numpy(版本 1.17)中添加的最新搜索算法。對於隨機排列的數字,Timsort 仍然幾乎與歸並排序一樣高效。
4. order | string 或list 或strings | 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])
這裏返回的數組包含元組的原始索引 Alex 、 Bob 和 Cathy 。
按 age 排序:
np.argsort(x, order="age")
array([1, 2, 0])
這裏返回的數組包含年齡為 15、24 和 35 的元組的原始索引。
您還可以傳入要排序的標簽數組(例如 order=["name", "age"] ),這將首先按 name 對數組進行排序,然後按 age 進行排序。
相關用法
- Python argparse.ArgumentParser.convert_arg_line_to_args用法及代碼示例
- Python argparse.ArgumentParser.add_argument_group用法及代碼示例
- Python NumPy argpartition方法用法及代碼示例
- Python NumPy argwhere方法用法及代碼示例
- Python NumPy argmin方法用法及代碼示例
- Python argparse.FileType用法及代碼示例
- Python argparse.ArgumentParser.add_mutually_exclusive_group用法及代碼示例
- Python argparse.ArgumentParser.get_default用法及代碼示例
- Python argparse.ArgumentParser.set_defaults用法及代碼示例
- Python argparse.ArgumentParser.exit用法及代碼示例
- Python NumPy argmax方法用法及代碼示例
- Python argparse.ArgumentParser.add_subparsers用法及代碼示例
- Python arcgis.gis._impl._profile.ProfileManager.save_as用法及代碼示例
- Python arcgis.raster.functions.ccdc_analysis用法及代碼示例
- Python arcgis.geometry.functions.trim_extend用法及代碼示例
- Python arcgis.raster.analytics.sample用法及代碼示例
- Python arcgis.features.analysis.derive_new_locations用法及代碼示例
- Python arcgis.features.analyze_patterns.calculate_density用法及代碼示例
- Python arcgis.geometry.Geometry.label_point用法及代碼示例
- Python arcgis.plan_routes用法及代碼示例
- Python arcgis.mapping.forms.FormInfo用法及代碼示例
- Python arcgis.gis.UserManager.get用法及代碼示例
- Python arcgis.raster.ImageryLayerCacheManager.update_tiles用法及代碼示例
- Python arcgis.geometry.Geometry.true_centroid用法及代碼示例
- Python arcgis.gis.User.generate_direct_access_url用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 NumPy | argsort method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
