使用Numpy统计全班的同学的成绩

使用Numpy实现班级同学成绩的统计

假设现在有如下的数据:

姓名/学科 语文 英语 数学
张飞 66 65 30
关羽 95 85 98
赵云 93 92 96
黄忠 90 88 77
典韦 80 90 90
  • 统计全班的成绩:在语文、数学、英语等中的平均成绩、最小成绩、最大成绩、方差、标准差。然后将这些人的总成绩排序输出:
import numpy as np
# 1、先定义一个人物类
persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['S32','i','i','i']
})
# 2、将数据加载
peoples = np.array([("ZhangFei",66,65,30),("GuanYu",95,85,98),
                    ("ZhaoYun",93,92,96),("HuangZhong",90,88,77),
                    ("DianWei",80,90,90)],dtype=persontype)
# 3、统计单科成绩                 
chineses = peoples[:]['chinese']
englishs = peoples[:]['english']
maths = peoples[:]['math']
# 平均成绩
print(np.mean(chineses))
print(np.mean(englishs))
print(np.mean(maths))
# 输出最小值和最大值
print(np.amin(chineses))
print(np.amin(englishs))
print(np.amin(maths))
print(np.amax(chineses))
print(np.amax(englishs))
print(np.amax(maths))
# 计算方差和标准差
stdchinese = np.array(chineses)
print(np.std(stdchinese))
print(np.var(stdchinese))
stdenglish = np.array(englishs)
print(np.std(stdenglish))
print(np.var(stdenglish))
stdmath = np.array(maths)
print(np.std(stdmath))
print(np.var(stdmath))
# 排序
# ①所有成绩
a = np.array([chineses,englishs,maths])
print(np.sort(a))
# ②按照三科成绩之和降序排列
#用sorted函数进行排序
ranking = sorted(peoples,key=lambda x:x[1]+x[2]+x[3], reverse=True)
print(ranking)

注意:定义的结构数组中的S32代表的是什么意思?

就是结构数组中:

persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['S32','i','i','i']
})

实际上使用的是Numpy的字符编码来表示数据类型的定义,比如i代表的是整数,f代表的是单精度浮点数,S代表的是字符串,S32代表的是32个字符的字符串。

参见下表:

数据类型 字符
整数 i
单精度浮点数 f
双精度浮点数 d
布尔值 b
字符串 S(大写)
Unicode U(大写)

假如数据中使用了中文,数学成绩中含有单精度浮点数,可以把数据类型设置为U32,i改成f,如下代码所示:

import numpy as np
persontype = np.dtype({
    'names':['name','chinese','english','math'],
    'formats':['U32','i','i','f']
})
peoples = np.array([("张飞",66,65,30.5),("关羽",95,85,98.5),
                    ("赵云",93,92,96.5),("黄忠",90,88,77),
                    ("典韦",80,90,90.5)],dtype=persontype)

你可能感兴趣的:(NumPy)