Numpy 排序 -- sort()、argsort()

本文详细介绍了Numpy中的排序函数sort()和argsort()的使用方法,包括参数解释、排序算法选择及多级排序操作,通过实例展示了如何对一维和二维数组进行内容排序和下标排序。

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

Numpy 排序 – sort()、argsort()


官方文档


1、内容排序:sort()


函数原型: 对数组本身进行排序

numpy.sort(a, axis=-1, kind='quicksort', order=None)

参数:

  • a:要排序的 numpy 数组
  • axis:排序的维度,默认为-1最后一维,None为所有元素拉平后排序
  • kind:排序算法,有:‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’
  • order:多级排序的顺序,需要构建一个field

实例:

import numpy as np
a = np.array([[1,4],[3,1]])

# 默认按最后一维排序,每行各自排序
np.sort(a)               
=> narray([[1, 4],
           [1, 3]])

# 按地1维排序 ,每列各自排序         
np.sort(a, axis=0)
=> narray([[1, 1],
           [3, 4]])

# 所有元素排序
np.sort(a, axis=None)
=> narray([1, 1, 3, 4])

# 多级排序
dtype = [('name', 'S10'), ('height', float), ('age', int)]
values = [('Arthur', 1.8, 41),  ('Lancelot', 1.9, 38), ('Galahad', 1.7, 38)]
a = np.array(values, dtype=dtype)
np.sort(a, order='height')                        
=> array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41), ('Lancelot', 1.8999999999999999, 38)],
      	 dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

2、下标排序:argsort()


函数原型: 数组本身不变,返回排序的下标数组

numpy.argsort(a, axis=-1, kind='quicksort', order=None)

参数:

  • a:要排序的 numpy 数组
  • axis:排序的维度,默认为-1最后一维,None为所有元素拉平后排序
  • kind:排序算法,有:‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’
  • order:多级排序的顺序,需要构建一个field

实例:

import numpy as np

# 一维数组
x = np.array([3, 1, 2])
np.argsort(x)
=> array([1, 2, 0])

# 二维数组
x = np.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]])

可以使用 `numpy.sort` 函数对数组进行排序,该方法能够直接对数组进行排序操作[^1]。`numpy.sort` 提供了参数 `axis` 来指定按哪个轴进行排序,默认情况下会对数组的最后一个轴进行排序[^2]。 ### 示例:一维数组排序 以下是一个简单的示例,演示如何对一个一维数组进行排序: ```python import numpy as np # 创建一维数组 x = np.array([3, 1, 2]) # 对数组进行排序 x_sorted = np.sort(x) print("原始数组:", x) print("排序后的数组:", x_sorted) ``` 输出: ``` 原始数组: [3 1 2] 排序后的数组: [1 2 3] ``` ### 示例:二维数组排序 对于二维数组,默认情况下会按照行进行排序(即沿着最后一个轴排序): ```python import numpy as np # 创建二维数组 x2 = np.array([[0, 3], [2, 2]]) # 对二维数组进行排序 x2_sorted = np.sort(x2) print("原始二维数组:") print(x2) print("排序后的二维数组:") print(x2_sorted) ``` 输出: ``` 原始二维数组: [[0 3] [2 2]] 排序后的二维数组: [[0 3] [2 2]] ``` ### 使用 `argsort` 获取排序索引 如果需要获取排序后的索引而不是直接排序数组,可以使用 `numpy.argsort` 函数[^2]。此函数返回的是排序后元素的索引值。 ```python import numpy as np # 创建一维数组 x = np.array([3, 1, 2]) # 获取排序后的索引 sorted_indices = np.argsort(x) print("排序后的索引:", sorted_indices) ``` 输出: ``` 排序后的索引: [1 2 0] ``` ### 随机打乱并恢复顺序 如果希望随机打乱数组并随后恢复到原始顺序,可以通过 `numpy.random.permutation` 和 `numpy.argsort` 实现[^3]: ```python import numpy as np # 给出原始列表 raw = np.array([1, 3, 5, 7, 9, 2, 4, 6, 8]) # 将数组打乱 index = np.random.permutation(raw.size) raw_shuffled = raw[index] # 恢复原始顺序 raw_restored = raw_shuffled[np.argsort(index)] print("打乱后的数组:", raw_shuffled) print("恢复后的数组:", raw_restored) ``` 输出将根据随机性而变化,但最终恢复的数组应该与原始数组相同。 通过这些方法,可以灵活地对 NumPy 数组进行排序和相关操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值