NumPy 数组排序

NumPy 提供了多种排序数组的方式,常用的如下表所示。

NumPy 数组排序函数
方式 说明
numpy.sort() 返回数组的排序副本
numpy.argsort() 返回排序后的元素索引数组
ndarray.sort() 原地排序数组(直接修改原数组)

numpy.sort() 对数组排序

在 NumPy 中,我们可以使用 sort() 函数返回数组的排序副本,原数组保持不变。

语法:

numpy.sort(arr, axis=-1, kind=None, order=None)

说明:

sort() 函数接收以下 4 个参数。

  • arr(必选):是一个数组
  • axis(可选,默认值:-1):指定排序的轴,默认为 -1,表示沿最后一个轴排序。
  • kind(可选):指定排序算法,默认为 'quicksort'。
  • order(可选):如果数组包含字段,则指定排序的字段。

示例 1:numpy.sort() 基本用法

import numpy as np

arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
result = np.sort(arr) 

print(arr)
print(result)

运行结果如下。

[3 1 4 1 5 9 2 6]
[1 1 2 3 4 5 6 9]

分析:

从结果可以看出,numpy.sort() 函数并不会修改原数组。

numpy.argsort() 对数组排序

在 NumPy 中,我们可以使用 numpy.argsort() 函数会对数组元素从小到大排序,然后以数组形式返回所有元素的索引。

语法:

numpy.argsort(arr, axis=-1, kind=None, order=None)

说明:

numpy.argsort() 函数接收以下 4 个参数。

  • arr(必选):需要排序的数组。
  • axis(可选,默认值:-1):指定排序的轴。默认值为 -1,表示沿最后一个轴进行排序。比如对于二维数组,axis=0 表示按列排序,axis=1 表示按行排序。
  • kind(可选):指定排序算法,默认为 'quicksort'。
  • order(可选):如果数组包含字段,则指定排序的字段。

注意: numpy.argsort() 返回数组排序后的索引数组,而不是排序后的值。

示例 2:numpy.argsort() 基本用法

import numpy as np

arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
indices= np.argsort(arr)

print('排序后的数组:', arr[indices])
print('排序后的索引:', indices)

运行结果如下。

排序后的数组:[1 1 2 3 4 5 6 9]
排序后的索引:[1 3 6 0 2 4 7 5]

分析:

argsort(arr) 会对 arr 进行从小到大排序,此时得到的排序后的数组为:[1 1 2 3 4 5 6 9]。然后再根据排序后数组来计算对应的索引:

  • 最小值 1 在原数组中的索引为 1 和 3。
  • 次小值 2 在原数组中的索引为 6。
  • 以此类推,直到最大值 9 的索引为 5。

因此,np.argsort(arr) 返回的索引数组为 [1, 3, 6, 0, 2, 4, 7, 5]。

ndarray.sort() 对数组排序

在 NumPy 中,我们可以使用 ndarray.sort() 方法对数组进行原地排序。注意,这里的 sort() 是 ndarray 对象的一个方法。

语法:

ndarray.sort(axis=-1, kind=None, order=None)

说明:

ndarray.sort() 方法接收以下 3 个参数。

  • axis(可选,默认值:-1):指定排序的轴。默认值为 -1,表示沿最后一个轴进行排序。比如对于二维数组,axis = 0 表示按列排序,axis = 1 表示按行排序。
  • kind(可选):指定排序算法,默认为 'quicksort'。
  • order(可选):如果数组包含字段,则指定排序的字段。

示例 3:ndarray.sort() 基本用法

import numpy as np

arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
arr.sort()       # 对数组进行原地排序

print(arr)

运行结果如下。

[1 1 2 3 4 5 6 9]

分析:

从结果可以看出,ndarray.sort() 方法会修改原数组。

上一篇: NumPy 数组转置

下一篇: NumPy 二维数组

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号