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() 方法会修改原数组。
