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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。