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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
