python利用numpy成绩进行处理
# 学生成绩
# 构造成绩
# 成绩统计
# 学生成绩模拟50个同学的语文,数学,英语三课的成绩,存储在numpy,使用学生的编号["01","02",......,"50"]
import numpy as np
def crateGrades():
G = np.zeros((50, 5))
G[:, 0] = np.arange(50)
G[:, 1] = np.floor(np.random.normal(70, 10, 50))
G[:, 2] = np.floor(np.floor(np.random.normal(80, 10, 50)))
G[:, 3] = np.floor(np.random.normal(70, 10, 50))
for j in range(3):
G[G[:, j] > 100, j] = 100
G[G[:, j] < 0, j] = 0
G[:, 4] = G[:, 1] + G[:, 2] + G[:, 3]
return G
def minmaxGrades(G):
for j in range(0, 5):
max = G[:, j].max()
min = G[:, j].min()
print("mark", j, "max")
print(G[G[:, j] == max, :])
print("mark", j, "min")
print(G[G[:, j] == min, :])
print()
def sort(G, column=1):
# 整行排序argsort,默认对按照第二列进行排序
index = np.argsort(G[:, column])
print(G[index, :])
print()
def ave(G):
# 计算平均值,对每一列进行计算
print(G[:, 1:].mean(axis=0))
# 哪些人在平均分之上,那些人在平均分之下:
def count(G):
print()
# 那些人在第二列的平均分之上
print(G[G[:, 1] > G[:, 1].mean(axis=0), :])
print()
# 那些人在第三列的平均分之上
print(G[G[:, 2] > G[:, 2].mean(axis=0), :])
print()
# 那些人在第四列的平均分之上
print(G[G[:, 3] > G[:, 3].mean(axis=0), :])
print()
# 那些人在总分的平均分之上
print(G[G[:, 4] > G[:, 4].mean(axis=0), :])
# 统计成绩在某个范围内
def countrange(column, a, b):
print()
r = (G[:, column] >= a) & (G[:, column] < b)
s = G[r, :]
print(s)
print(r.sum())
if __name__=="__main__":
G = crateGrades()
# print(G)
minmaxGrades(G)
# 对总分进行排序
sort(G, 4)
# 计算平均值
ave(G)
# 哪些人在平均分之上,那些人在平均分之下
count(G)
# 统计成绩在某个范围内,例如第二列中成绩在60-70之间的及人数
countrange(1, 60, 70)