NumPy数组排序的多个函数(附带实例)
NumPy 中可以借助 sort()、argsort() 和 lexsort() 对数组进行排序。
【实例】对数组元素按行和按列排序。对数组元素排序,程序代码如下:
【实例】对数组元素升序排序。
【实例】通过排序解决成绩相同学生的录取问题。某重点高中精英班录取学生参考总成绩,由于名额有限,总成绩相同时,数学成绩高的优先录取;总成绩和数学成绩都相同时,英语成绩高的优先录取。下面使用 lexsort() 函数对学生成绩排序。
NumPy sort()函数
使用 sort() 函数进行排序将直接改变原数组,参数 axis 指定按行排序还是按列排序。【实例】对数组元素按行和按列排序。对数组元素排序,程序代码如下:
import numpy as np n = np.array([[4, 7, 3], [2, 8, 5], [9, 1, 6]]) print("数组排序:") print(np.sort(n)) print("按行排序:") print(np.sort(n, axis=0)) print("按列排序:") print(np.sort(n, axis=1))运行结果为:
数组排序:
[[3 4 7]
[2 5 8]
[1 6 9]]
按行排序:
[[2 1 3]
[4 7 5]
[9 8 6]]
按列排序:
[[3 4 7]
[2 5 8]
[1 6 9]]
NumPy argsort()函数
使用 argsort() 函数对数组元素排序,返回升序排列之后数组元素从小到大的索引值。【实例】对数组元素升序排序。
import numpy as np x = np.array([4, 7, 3, 2, 8, 5, 1, 9, 6]) print("升序排列后的索引值") y = np.argsort(x) print(y) print("按排序后的顺序重构原数组") print(x[y])运行结果:
升序排列后的索引值:
[6 3 2 0 5 8 1 4 7]
按排序后的顺序重构原数组:
[1 2 3 4 5 6 7 8 9]
NumPy lexsort()函数
lexsort() 函数用于对多个序列进行排序,类似于对电子表格排序,每一列代表一个序列,排序时优先照顾靠后的列。【实例】通过排序解决成绩相同学生的录取问题。某重点高中精英班录取学生参考总成绩,由于名额有限,总成绩相同时,数学成绩高的优先录取;总成绩和数学成绩都相同时,英语成绩高的优先录取。下面使用 lexsort() 函数对学生成绩排序。
import numpy as np math = np.array([101, 109, 115, 108, 118, 118]) # 创建数学成绩数组 en = np.array([117, 105, 118, 108, 98, 109]) # 创建英语成绩数组 total = np.array([621, 623, 620, 620, 615, 615]) # 创建总成绩数组 sort_total = np.lexsort((en, math, total)) # 按 en → math → total 升序排序,返回索引 print("排序后的索引值") print(sort_total) print("通过排序后的索引值获取排序后的数组:") print(np.array([[en[i], math[i], total[i]] for i in sort_total]))运行结果:
排序后的索引值
[4 5 3 2 0 1]
通过排序后的索引值获取排序后的数组:
[[ 98 118 615]
[109 118 615]
[108 108 620]
[118 115 620]
[117 101 621]
[105 109 623]]