numpy中的argsort()排序

本文详细介绍了 NumPy 库中的 argsort 函数,解释了该函数如何返回数组值从小到大的索引值,并提供了多个示例来展示其在一维和二维数组中的使用方法,包括按行和按列排序的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

argsort函数返回的是数组值从小到大的索引值

 

·1、argsort()函数,是numpy库中的函数

argsort函数
argsort函数返回的是数组值从小到大的索引值

Examples
--------
One dimensional array:一维数组

>>> x = np.array([3, 1, 2])
>>> np.argsort(x)  
array([1, 2, 0]) 

Two-dimensional array:二维数组

>>> x = np.array([[0, 3], [2, 2]])
>>> x
array([[0, 3],
[2, 2]])

>>> np.argsort(x, axis=0) #按列排序
array([[0, 1],
[1, 0]])

>>> np.argsort(x, axis=1) #按行排序
array([[0, 1],
[0, 1]])
#######################################

例1:

>>> x = np.array([3, 1, 2])
>>> np.argsort(x) #按升序排列
array([1, 2, 0])
>>> np.argsort(-x) #按降序排列
array([0, 2, 1])
>>> x[np.argsort(x)] #通过索引值排序后的数组
array([1, 2, 3])
>>> x[np.argsort(-x)]
array([3, 2, 1])
另一种方式实现按降序排序:

>>> a = x[np.argsort(x)]
>>> a
array([1, 2, 3])
>>> a[::-1]
array([3, 2, 1])

### numpy.argsort 的使用方法 `numpy.argsort` 是 NumPy中的一个重要函数,它通过对数组的值进行排序并返回排序后的索引数组。以下是关于该函数的具体说明及其用法: #### 函数定义 `numpy.argsort(a, axis=-1, kind=None, order=None)` 此函数接收四个参数: - `a`: 输入数组。 - `axis`: 沿哪个轴进行排序,默认为 `-1` 表示沿最后一维排序;如果设置为 `None` 则会将数组展平后再排序[^2]。 - `kind`: 排序算法的选择,默认为快速排序 `'quicksort'`,可选值有 `'mergesort'`, `'heapsort'`, 和 `'stable'`[^4]。 - `order`: 当输入是一个结构化数组时,指定字段的排序优先级。 #### 返回值 返回的是一个与原数组形状相同的整数型数组,其中存储的是按升序排列后对应的原始位置索引[^3]。 --- #### 示例代码展示 以下是一些具体的例子来演示如何使用 `numpy.argsort()`: ```python import numpy as np # 创建一维数组 arr_1d = np.array([40, 10, 30, 20]) # 对一维数组应用 argsort() sorted_indices_1d = np.argsort(arr_1d) print("Original array:", arr_1d) print("Sorted indices of original array:", sorted_indices_1d) ``` 运行上述代码的结果如下: ``` Original array: [40 10 30 20] Sorted indices of original array: [1 3 2 0] ``` 解释:按照从小到大排序,最小值位于索引 1 处 (值为 10),次小值位于索引 3 处 (值为 20),以此类推[^1]。 对于二维或多维数组的情况可以这样操作: ```python # 创建二维数组 arr_2d = np.array([[9, 7], [8, 6]]) # 默认沿着最后一个维度排序 sorted_indices_axis1 = np.argsort(arr_2d, axis=1) print("Original 2D array:\n", arr_2d) print("Indices that would sort along the last axis:\n", sorted_indices_axis1) ``` 输出结果将是: ``` Original 2D array: [[9 7] [8 6]] Indices that would sort along the last axis: [[1 0] [1 0]] ``` 这里每行分别被独立地进行了排序处理。 还可以通过改变 `axis` 参数实现不同方向上的排序需求。 --- #### 注意事项 当需要获取实际排序后的数值而非仅限于索引时,则需利用这些索引来重新构建已排序版本的数据集。例如可以通过下面的方式完成这一目标: ```python sorted_array = arr_1d[sorted_indices_1d] print("Array after sorting by indices:", sorted_array) ``` 这将会打印出完全有序的新序列 `[10 20 30 40]`. 此外,在某些情况下可能还需要考虑稳定性问题以及特定类型的比较逻辑等问题,此时可以选择不同的排序方式或者调整其他选项以满足具体应用场景下的特殊要求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值