P30思考练习题2
1,将scores数组中所有学生的英语成绩减去3分并显示。
2.统计scores数组中每名学生所有科目的平均分并显示。
3,使用随机函数生成[-1,1]之间服从均匀分布的3×4二维数组,并计算所有元素的和。
#思考与练习2
import numpy as np
names=np.array(['王薇','肖良英','方绮雯','刘旭阳','钱易铭'])
subjects=np.array(['Math','English','Python','Chinese','Art','Database','Physics'])
scores=np.array([[70,85,77,90,82,84,89],
[60,64,80,75,80,92,90],
[90,93,88,87,86,90,91],
[80,82,91,88,83,86,80],
[88,72,78,90,91,73,80]])
#1
a = scores[: ,subjects =='English']-3
print(a)
#2
b = scores.mean(axis = 1)
print("每位同学的所有科目的平均分为:")
for i in range(0,5):
print(names[i],":",b[i])
#3
b = np.random.uniform(-1,1,size = (3,4)) #uniform()函数的生成的随机数范围,两端都取。此题中可取-1与1。
print(b)
print(b.sum())
【补充作业题2】
1.选取scores中第2行第2列元素
scores[1,1]
2.选取scores中两个元素,行序号为0,列序号为1的元素;以及行序号为3,列序号为6的元素。
scores[[0,3],[1,6]]
3.选取数组scores中的前3行数据
#方法一
scores[0:3] #或scores[0:3,: ]
#方法二
scores[[0,1,2]] #或scores[[0,1,2],: ]
4.选取scores中,列序号为1~4 的列
#方法一:
scores[: ,1:5] #或scores[: ,[1,2,3,4]]或scores[[0,1,2,3,4],1:5]或scores[0:5,1:5]
#方法二
scores[[0,1,2,3,4]][: ,1:5] #或scores[[0,1,2,3,4]][: ,[1,2,3,4]]
#方法三
scores[0:5][: ,1:5] #或scores[: ,][: ,1:5]或scores[: ,: ][: ,1:5]或scores[: ,: ][: ,[1,2,3,4]]
5.选取scores中,行序号为1,2,列序号为0,2,4 的元素
#方法一
scores[1:3,[0,2,4]]
#方法二:两层切片,先行后列
scores[1:3][: ,[0,2,4]] #或scores[[1,2]][: ,[0,2,4]]
#方法三:两层切片,先列后行
scores[: ,[0,2,4]][1:3] #或scores[: ,[0,2,4]][[1,2]]
6.选取钱易铭的成绩
scores[(names == '钱易铭')]
#for循环输出成绩
m = scores[(names == '钱易铭')]
print("钱易铭各科目的成绩为:")
for i in range(0,7):
print(subjects[i],":",m[0,i])
7.选取钱易铭的数学成绩
scores[(names == '钱易铭'),(subjects =='Math')]
8.选取王薇和肖良英的数学和英语成绩
#方法一:双层切片,先行(人名)后列(学科)
scores[(names =='王薇')|(names =='肖良英')][: ,(subjects == 'Math')|(subjects =='English')]
#方法二:双层切片,先列(学科)后行(人名)
scores[: ,(subjects == 'Math')|(subjects =='English')][(names =='王薇')|(names =='肖良英')]
9.选取scores中,大于等于80并且小于90的元素
scores[(scores>=80)&(scores<90)]
10.将第1列元素的值都增加5
#单独显示增加5的那一列
#方法一:
scores[: ,0]+5
#方法二:采用函数,subtract()减函数与add()加和函数
np.subtract(scores[: ,0],-5)
np.add(scores[: ,0],5)
#方法三:构造ones()函数
a = np.ones((1,5))*5
scores[: ,0]+a
#或者
b = np.ones((5,1))*5
scores[: ,0]+b.T #用到了数组的转置
#方法四:构造zero()函数
c = np.zeros((5,7))
c[: ,0] = 5
scores+c
#显示全部列
#方法一:
scores+[5,0,0,0,0,0,0]
#方法二:采用ones()函数
m = np.zeros((5,7))
m[: ,0] = 5
scores+m
#方法三:
n = np.ones((5,7))*5
n[: ,1: ] =0#或者c[: ,1:7]=0
scores+n