首页 > 编程笔记 > Python笔记 阅读:23

NumPy常用排序函数(附带实例)

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

NumPy sort()函数

numpy.sort() 函数提供了多种排序功能,支持归并排序、堆排序、快速排序等多种排序算法。

sort() 函数的格式为:
numpy.sort(a, axis, kind, order)

【实例】利用 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.]

相关文章