np.argsort函数用法
时间: 2024-03-01 13:47:07 浏览: 237
np.argsort函数是NumPy库中的一个函数,用于返回数组排序后的索引值。它可以按照指定的轴对数组进行排序,并返回排序后的索引值数组。
该函数的用法如下:
```python
numpy.argsort(a, axis=-1, kind=None, order=None)
```
参数说明:
- a:要排序的数组。
- axis:指定排序的轴,默认为-1,表示按照最后一个轴进行排序。
- kind:指定排序算法,默认为'quicksort',还可以选择'mergesort'和'heapsort'。
- order:如果数组是结构化数组,则可以指定按照哪个字段进行排序。
返回值:
- 返回一个数组,其中包含按照指定轴排序后的索引值。
示例代码:
```python
import numpy as np
arr = np.array([3, 1, 2])
sorted_indices = np.argsort(arr)
print(sorted_indices) # 输出:[1 2 0]
```
上述示例中,我们创建了一个一维数组arr,然后使用np.argsort函数对其进行排序,并将排序后的索引值存储在sorted_indices中。最后打印sorted_indices,输出为[1 2 0],表示原数组arr中的元素按照从小到大的顺序排列时,索引为1的元素最小,索引为2的元素次小,索引为0的元素最大。
相关问题
np.argsort
np.argsort()函数是NumPy中的一个函数,用于返回数组排序后的索引值。它可以按照数组元素的大小从小到大或从大到小的顺序返回对应的索引值。
具体用法是通过调用np.argsort(a)来对数组a进行排序,返回的是排序后的索引值。例如,对于数组x=np.array([1,4,3,-1,6,9]),调用x.argsort()会返回数组[3,0,2,1,4,5]。这表示原数组的第一个元素-1在排序后的数组中的索引是3,第二个元素1在排序后的数组中的索引是0,以此类推。
另外,当我们使用np.argsort()[num]时,num的取值有两种情况。当num大于等于0时,np.argsort()[num]可以理解为数组排序后的第num个元素的索引;当num小于0时,np.argsort()[num]会将数组排序后的索引值反向输出,即倒数第num个元素的索引值。例如,np.argsort()[-1]会输出原数组中最大值对应的索引,np.argsort()[-2]会输出原数组中第二大值对应的索引,以此类推。
总之,np.argsort()函数是一个非常有用的函数,可以帮助我们对数组进行排序并获取排序后的索引值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Python基本函数:【numpy】np.argsort()函数详细解释运算过程](https://blog.csdn.net/tianxinyiru/article/details/123704934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [【numpy】np.argsort()函数](https://blog.csdn.net/qq_38486203/article/details/80967696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [浅析python中numpy包中的argsort函数的使用](https://download.csdn.net/download/weixin_38587130/12867102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
np.argsort的mersort
### np.argsort 使用 Mergesort 的具体用法及参数说明
`numpy.argsort()` 是 NumPy 中的一个重要函数,用于返回数组排序后的索引位置。当指定 `kind='mergesort'` 参数时,该函数会采用归并排序算法 (Mergesort) 来完成排序操作[^1]。
#### 归并排序的特点
归并排序是一种稳定的排序算法,时间复杂度为 \(O(n \log n)\),适用于需要保持原始数据顺序稳定性的场景。在某些情况下,比如处理结构化数组或多维数组时,稳定性是非常重要的特性之一[^4]。
---
#### 参数说明
以下是 `numpy.argsort()` 函数的主要参数及其作用:
| 参数名 | 描述 |
|--------|------|
| `a` | 输入的待排序数组。可以是一维或更高维度的数组。 |
| `axis` | 指定沿哪个轴进行排序,默认值为 `-1` 表示最后一个轴;如果设置为 `None` 则会对整个数组展平后再排序。 |
| `kind` | 排序方法的选择,默认为 `'quicksort'`,可选值有 `'quicksort'`, `'heapsort'`, 和 `'mergesort'`。对于需要稳定排序的情况推荐使用 `'mergesort'` 或 `'stable'`(后者兼容更多情况)。 |
| `order` | 当输入的是结构化数组时,定义字段优先级顺序来进行排序。 |
---
#### 示例代码:一维数组排序
下面展示如何在一维数组上使用 `np.argsort(kind='mergesort')` 进行排序:
```python
import numpy as np
arr = np.array([6, 1, 3])
sorted_indices = np.argsort(arr, kind='mergesort')
print(f"原数组: {arr}")
print(f"排序后索引: {sorted_indices}") # 输出 [1 2 0]
```
上述代码中,`sorted_indices` 存储了按照升序排列的元素对应的原始索引位置[^5]。
---
#### 示例代码:多维数组排序
针对二维数组或其他高维数组,可以通过调整 `axis` 参数实现不同方向上的排序需求。例如:
```python
matrix = np.array([[8, 3, 7], [1, 5, 9]])
# 默认按最后一维(列)排序
row_sorted_indices = np.argsort(matrix, axis=1, kind='mergesort')
print("按行排序:")
print(row_sorted_indices)
# 按第一个维度(行)排序
col_sorted_indices = np.argsort(matrix, axis=0, kind='mergesort')
print("\n按列排序:")
print(col_sorted_indices)
```
运行结果如下所示:
```
按行排序:
[[1 2 0]
[0 1 2]]
按列排序:
[[1 0 0]
[0 1 1]]
```
这里分别展示了基于行和列两种方式下的排序效果。
---
#### 应用实例:利用 mergesort 实现稳定排序
假设我们有一个包含重复键值的数据集,并希望对其进行分类汇总统计,则可以选择使用 `mergesort` 方法以确保相同数值项之间的相对次序不变。
```python
data = np.array(['apple', 'banana', 'cherry', 'apple'])
indices = np.argsort(data, kind='mergesort')
print("排序前:", data)
print("排序后索引:", indices)
print("重新排列的结果:", data[indices])
```
输出将是:
```
排序前: ['apple' 'banana' 'cherry' 'apple']
排序后索引: [0 3 1 2]
重新排列的结果: ['apple' 'apple' 'banana' 'cherry']
```
可以看到,在这种情形下,“apple”的两个记录依然维持原有的先后关系[^3]。
---
### 注意事项
尽管 `mergesort` 提供了良好的性能以及稳定性保障,但它占用额外内存空间较大,因此在面对超大规模数据集时可能不如其他非稳定排序算法那样高效。
---
阅读全文
相关推荐















