NumPy提供了多种排序的方法。这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能是所需的工作空间和算法的稳定性。
numpy.sort()函数提供了多种排序功能,支持归并排序、堆排序、快速排序等多种排序算法。函数的格式为:
numpy.sort(a,axis,kind,order):参数a为要排序的数组;axis为沿着排序的轴,axis=0按照列排序,axis=1按照行排序;kind为排序所用的算法,默认使用快速排序。常用的排序方法还有:
· quicksort():快速排序,速度最快,算法不具有稳定性。
· mergesort():归并排序,优点是具有稳定性,空间复杂度较高,一般外部排序时才会考虑。
· heapsort():堆排序,优点是堆排序在最坏的情况下,其时间复杂度也为 O ( n log n )。它是一个既最高效率又最节省空间的排序方法。
【例2-45】 利用sort()函数对给定数组进行排序。
运行程序,输出如下:
数组是: [[3 7] [9 1]] 调用sort()函数: [[3 7] [1 9]] 按列排序: [[3 1] [9 7]] 数组是: [(b'raju',21)(b'anil',25)(b'ravi',17)(b'amar',27)] 按name排序: [(b'amar',27)(b'anil',25)(b'raju',21)(b'ravi',17)]
numpy.argsort()函数返回的是数组值从小到大的索引值。格式为:
numpy.argsort(a,axis=-1,kind='quicksort',order=None)
参数类似于sort()函数。
【例2-46】 利用argsort()函数对数组进行排序。
运行程序,输出如下:
数组为: [4 2 3 1] 从小到大排序后的索引值为: [3 1 2 0] 以排序后的顺序重构原数组: [1 2 3 4] 使用循环重构原数组: 1 2 3 4
numpy.lexsort()函数用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。
这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取……这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
【例2-47】 利用lexsort()函数对数据进行排序。
运行程序,输出如下:
调用l exsort()函数: [3 1 0 2] 使用这个索引来获取排序后的数据: ['amar,f.y.','anil,s.y.','raju,f.y.','ravi,s.y.']
numpy.extract()函数根据某个条件从数组中抽取元素,返回满足条件的元素。
【例2-48】 利用extract()函数抽取数组中的元素。
运行程序,输出如下:
数组是: [[0.1.2.] [3.4.5.] [6.7.8.]] 按元素的条件值: [[True False True] [False True False] [True False True]] 使用条件提取元素: [0.2.4.6.8.]