假设现在有如下的数据:
姓名/学科 | 语文 | 英语 | 数学 |
---|---|---|---|
张飞 | 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)