练习一
在讲解 Matplotlib 的时候,我们使用以下代码绘制分组条形图。其中讲解到,三根柱子的位置需要同时往左或往右移动时,需要使用到列表推导式。实际上,还有其他方法,请使用numpy的所学来优化我们该部分代码。
原代码如下:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,700,2800]
width = 0.35
po_l = [i-width/2 for i in list(range(len(fruits)))]
plt.bar(po_l,Q1_sales,width,label="Q1")
po_r = [i+width/2 for i in list(range(len(fruits)))]
plt.bar(po_r,Q2_sales,width,label="Q2")
plt.legend()
plt.xticks(list(range(len(fruits))),fruits)
plt.show()
原代码运行结果的绘图,如下所示:
优化为:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fruits = ["苹果","梨子","车厘子"]
Q1_sales = [1000,800,3000]
Q2_sales = [1200,700,2800]
width = 0.35
arr = np.arange(3)
po_ll = arr-0.175
plt.bar(po_ll,Q1_sales,width,label="Q1")
po_rr = arr+0.175
plt.bar(po_rr,Q2_sales,width,label="Q2")
plt.legend()
plt.xticks(list(range(len(fruits))),fruits)
plt.show()
经过优化后的代码,运行结果如下所示:
练习二
请完成以下基础练习:
• np.arange(16).reshape(4,4)与2做减法
• np.arange(16).reshape(4,4)与np.arange(16,32).reshape(4,4)做加法运算
• np.arange(8).reshape(2,4)与np.arange(4)运算吗?
• np.arange(8).reshape(2,4)与np.arange(4).reshape(1,4)运算吗?
• np.arange(8).reshape(2,4)与np.arange(4).reshape(4,1)运算吗?
import numpy as np
arr1 = np.arange(16).reshape(4,4)
arr1-2
arr2 = np.arange(16).reshape(4,4)
arr3 = np.arange(16,32).reshape(4,4)
arr2+arr3
arr4 = np.arange(8).reshape(2,4)
arr5 = np.arange(4)
arr4+arr5
arr6 = np.arange(4).reshape(1,4)
arr4+arr6
arr7 = np.arange(4).reshape(4,1)
arr4+arr7
运行结果报错如下:
练习三
请完成以下基础练习:
• 构建数组: np.arange(16).reshape(4,4)
• 选择 第3列
• 选择 1-3 列
• 选择 2,4 列
• 选择 4,7 两个点 将值改为 0
• 过滤出 <5 的值
import numpy as np
a = np.arange(16).reshape(4,4)
a
a[:,2]
a[:,:3]
a[:,1::2]
a[1,(0,3)] = 0
a
a[1,::3] = 0
a
a[a<5]
a[(2<a) & (a<10)]
练习四
通过以下代码读取📎scores.csv 数据,并且完成以下练习:
import numpy as np
score_data = np.loadtxt("scores.csv",delimiter=",",skiprows=1)
score_data
• 筛选出 成绩 大于60 并且 小于80 的数据
• 筛选出 成绩 大于80 并且 小于90 的数据
• 筛选出 成绩 大于90 的数据
import numpy as np
score_data = np.loadtxt("scores.csv",delimiter=",",skiprows=1,encoding='gbk')
score_data
print(score_data.ndim)
print(score_data.shape)
print(score_data.dtype)
score_data[(60<score_data)&(score_data<80)]
score_data[(80<score_data)&(score_data<90)]
score_data[score_data>90]