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)
#%%