NumPy常用排序函数(附带实例)
NumPy sort()函数
numpy.sort() 函数提供了多种排序功能,支持归并排序、堆排序、快速排序等多种排序算法。sort() 函数的格式为:
numpy.sort(a, axis, kind, order)
- a 为要排序的数组;
- axis 为沿着排序的轴,axis=0 按照列排序,axis=1 按照行排序;
- kind 为排序所用的算法,默认使用快速排序。常用的排序方法还有:
- quicksort():快速排序,速度最快,算法不具有稳定性。
- mergesort():归并排序,优点是具有稳定性,空间复杂度较高,一般外部排序时才会考虑。
- heapsort():堆排序,优点是堆排序在最坏的情况下,其时间复杂度也为 O(nlogn)。它是一个既最高效率又最节省空间的排序方法。
【实例】利用 sort() 函数对给定数组进行排序。
import numpy as np a = np.array([[3, 7], [9, 11]]) print('数组是:') print(a) print('\n') print('调用 sort() 函数:') print(np.sort(a)) print('\n') print('按列排序:') print(np.sort(a, axis = 0)) print('\n') # 在 sort() 函数中排序字段 dt = np.dtype([('name', 'S10'), ('age', int)]) a = np.array([("raju", 21), ("anil", 25), ("ravi", 17), ("amar", 27)], dtype = dt) print('数组是:') print(a) print('\n') print('按 name 排序:') print(np.sort(a, order = 'name'))运行程序,输出如下:
数组是:
[[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() 函数返回的是数组值从小到大的索引值。格式为:numpy.argsort(a,axis=-1,kind='quicksort',order=None)参数类似于 sort() 函数。
【实例】利用 argsort() 函数对数组进行排序。
import numpy as np x = np.array([4, 2, 3, 1]) print('数组为:\n{}'.format(x)) y = x.argsort() print('从小到大排序后的索引值为:\n{}'.format(y)) print('以排序后的顺序重构原数组:\n{}'.format(x[y])) print('使用循环重构原数组:') for i in y: print(x[i], end=" ")运行程序,输出如下:
数组为:
[4 2 3 1]
从小到大排序后的索引值为:
[3 1 2 0]
以排序后的顺序重构原数组:
[1 2 3 4]
使用循环重构原数组:
1 2 3 4
NumPy lexsort()函数
numpy.lexsort() 函数用于对多个序列进行排序。把它想象成对电子表格进行排序,每一列代表一个序列,排序时优先照顾靠后的列。这里举一个应用场景:小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,数学成绩高的优先录取,在总成绩和数学成绩都相同时,按照英语成绩录取……这里,总成绩排在电子表格的最后一列,数学成绩在倒数第二列,英语成绩在倒数第三列。
【实例】利用 lexsort() 函数对数据进行排序。
import numpy as np nm = ('raju', 'anil', 'ravi', 'amar') dv = ('f.y.', 's.y.', 's.y.', 'f.y.') ind = np.lexsort((dv, nm)) print('调用 lexsort() 函数:') print(ind) print('\n') print('使用这个索引来获取排序后的数据:') print([nm[i] + ", " + dv[i] for i in ind])运行程序,输出如下:
调用 lexsort() 函数:
[3 1 0 2]
使用这个索引来获取排序后的数据:
['amar,f.y.','anil,s.y.','raju,f.y.','ravi,s.y.']
NumPy extract()函数
numpy.extract() 函数根据某个条件从数组中抽取元素,返回满足条件的元素。【实例】利用 extract() 函数抽取数组中的元素。
import numpy as np x = np.arange(9.).reshape(3, 3) print('数组是:') print(x) # 定义条件, 选择偶数元素 condition = np.mod(x, 2) == 0 print('按元素的条件值:') print(condition) print('使用条件提取元素:') print(np.extract(condition, x))运行程序,输出如下:
数组是:
[[0.1.2.]
[3.4.5.]
[6.7.8.]]
按元素的条件值:
[[True False True]
[False True False]
[True False True]]
使用条件提取元素:
[0.2.4.6.8.]