NumPy的排序有直接排序和间接排序。直接排序是对数据直接进行排序,间接排序是指根据一个或多个键值对对数据进行排序。直接排序使用sort(),间接排序使用argsort()和lexsort()。
sort()
sort()是常用的排序方法。其中numpy.sort()调用后不会改变原始数组,返回数组的排序副本。ndarray.sort()调用后改变原始数组,无返回值。
格式:
numpy.sort(a,axis=-1,kind='quicksort',order=None) #形式1 ndarray.sort(axis=-1,kind='quicksort',order=None) #形式2
其中参数含义如下。
a:要排序的数组。
axis:使得sort()可以沿着指定轴对数据集进行排序。axis=1为沿横轴(按行)排序,axis=0为沿纵轴(按列)排序,axis=None为将数组展开后进行排序。
kind:排序算法,默认为quicksort,表示使用快速排序算法。
order:如果数组包含字段,则字段是要排序的字段。
例如:
import numpy as np a = np.array([7, 9, 5, 2, 9, 4, 3, 1, 4, 3]) print('原数组:', a) a.sort() #第2种形式,等价于a=np.sort(a) print('排序后: ', a)
输出结果:
原数组: [7 9 5 2 9 4 3 1 4 3] 排序后: [1 2 3 3 4 4 5 7 9 9]
sort()带参数轴的排序,示例程序如下:
import numpy as np a = np.array([[4, 2, 9, 5], [6, 4, 8, 3], [1, 6, 2, 4]]) print('原数组:', a) a.sort(axis=1) #axis=1代表沿横轴(按行)排序 print('排序后: ', a)
输出结果:
原数组: [[4 2 9 5] [6 4 8 3] [1 6 2 4]] 排序后: [[2 4 5 9] [3 4 6 8] [1 2 4 6]]
sort()中有排序字段,示例程序如下。
dt = np.dtype([('name', 'S10'),('age', int)]) a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) print('按 name 排序:') print(np.sort(a, order = 'name')) print(np.sort(a, order = 'age'))
输出结果:
按 name 排序: [(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)] [(b'ravi', 17) (b'raju', 21) (b'anil', 25) (b'amar', 27)]