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