1 问题描述
复习矩阵相关操作,分析菜价
- 将表中数据,使用 numpy 进行处理展示
- 使用循环的方式 计算采购总额
- 使用点乘计算采购总额
- 测试性能
2 解题提示
- 使用numpy 中的array进行表格与矩阵的转化
- 使用dot 来实现矩阵相乘
- 通过jupyter的魔法命令来测试 性能
3 评分标准
作业共计四个要求,要求1,3各为5分,要求2,4各为10分。
4 要点解析
矩阵相乘必须满足矩阵A的列数与矩阵B的行数相等,列数与行数对应相乘,然后相加。
jupyter用来测试时间的魔法命令共计四种
- %timeit 测试代码的执行时间 【%timeit后边只能跟一行代码】
%timeit lis = [x for x in range(10000)]
- %%timeit 测试代码块的执行时间
%%timrit
lis = []
for i in range(10000):
lis.append(1)
- %time 测试单次运行所需要的时间 【%time和%timeit都是测试时间,但是%time没有%timeit准确】
%time lis = [x for x in range(10000)]
- %%time 测试代码块的执行时间
%%time
lis = []
for i in range(10000):
lis.append(i)
5 代码实现
#%% md
## 作业一:
- 复习矩阵相关操作,并完成下题: 菜价
日期 白菜 土豆 冬瓜
2019/7/28 1.2 1.5 1.8
2019/7/29 1.3 1.4 1.9
2019/7/30 1.1 1.6 1.7
- 每天采购数量相等,分别如下
品名 数量
白菜 5
土豆 10
冬瓜 9
- 上面的数据,可以在numpy中表示如下 5分
X = np.array([[1.2, 1.5, 1.8],
[1.3, 1.4, 1.9],
[1.1, 1.6, 1.7]])
y = np.array([5, 10, 9]).T
- 要求
- 1. 使用循环的方式计算每天的采购总金额 得到结果为[37.2, 37.6, 36.8],分别表示7/28、7/29、7/30这三天采购总额 10分
- 2. 使用矩阵点乘来计算每天的采购总金额(使用np.dot来实现矩阵相乘) 5分
- 3. 测试两种方式的性能 10分
#%%
# 导入模块
import numpy as np
#%% md
#### 使用循环方法得到采购总额
#%%
# 定义for循环计算用的函数
def veg_sum(X,Y):
# 定义日期列表
date=['7/28','7/29','7/30']
# 定义起始值0
vegsum=[]
sum = 0
# 循环
for i in range(3):
sum = 0
for j in range(3):
# 矩阵相乘 相加
sum += (X[i,j] * Y[j])
vegsum.append(sum)
print(vegsum)
for i in range(3):
print('日期:',date[i],'金额:',vegsum[i])
#%%
X=np.array([[1.2,1.5,1.8],[1.3,1.4,1.9],[1.1,1.6,1.7]])
Y=np.array([[5,10,9]]).T
#%%
%timeit res = veg_sum(X,Y)
#%%
#%% md
#### 使用矩阵点乘计算
#%%
def veg_sum_dot(X,Y):
# 点乘
vegsum=np.dot(X,Y)
date=['7/28','7/29','7/30']
for i in range(3):
print('日期:',date[i],'金额:',vegsum[i])
#%%
X=np.array([[1.2,1.5,1.8],[1.3,1.4,1.9],[1.1,1.6,1.7]])
Y=np.array([5,10,9]).T
#%%
%time res=veg_sum_dot(X,Y)
#%%