购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 NumPy排序

NumPy提供了多种排序的方法。这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能是所需的工作空间和算法的稳定性。

1.sort()函数

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)]

2.argsort()函数

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

3.lexsort()函数

numpy.lexsort()函数用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。

这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取……这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。

【例2-47】 利用lexsort()函数对数据进行排序。

运行程序,输出如下:

     调用l exsort()函数:
     [3 1 0 2]
     使用这个索引来获取排序后的数据:
     ['amar,f.y.','anil,s.y.','raju,f.y.','ravi,s.y.']

4.extract()函数

numpy.extract()函数根据某个条件从数组中抽取元素,返回满足条件的元素。

【例2-48】 利用extract()函数抽取数组中的元素。

运行程序,输出如下: 2Jj+eIbtmr8JZXvZF4J6FEWF04sALeNenKVArqjDflQlQf8Ozoomfw8bgcw8bEO0

     数组是:
     [[0.1.2.]
      [3.4.5.]
      [6.7.8.]]
     按元素的条件值:
     [[True False True]
      [False True False]
      [True False True]]
     使用条件提取元素:
     [0.2.4.6.8.]
点击中间区域
呼出菜单
上一章
目录
下一章
×