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

本文介绍了如何利用Numpy库来统计班级学生的语文、数学、英语等科目的平均分、最低分、最高分、方差和标准差。还探讨了Numpy中数据类型的含义,如S32代表32个字符的字符串,并给出了处理包含中文和单精度浮点数数据的示例代码。

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

假设现在有如下的数据:

姓名/学科语文英语数学
张飞666530
关羽958598
赵云939296
黄忠908877
典韦809090
  • 统计全班的成绩:在语文、数学、英语等中的平均成绩、最小成绩、最大成绩、方差、标准差。然后将这些人的总成绩排序输出:
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(大写)
UnicodeU(大写)

假如数据中使用了中文,数学成绩中含有单精度浮点数,可以把数据类型设置为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)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值