2.15 Python 中的广播-深度学习-Stanford吴恩达教授
| 2.14 向量化 Logistic 回歸的梯度輸出 | 回到目錄 | 2.16 關于 Python Numpy 向量的說明 |
Python 中的廣播 (Broadcasting in Python)
這是一個不同食物(每100g)中不同營養成分的卡路里含量表格,表格為3行4列,列表示不同的食物種類,從左至右依次為蘋果,牛肉,雞蛋,土豆。行表示不同的營養成分,從上到下依次為碳水化合物,蛋白質,脂肪。
那么,我們現在想要計算不同食物中不同營養成分中的卡路里百分比。
現在計算蘋果中的碳水化合物卡路里百分比含量,首先計算蘋果(100g)中三種營養成分卡路里總和56+1.2+1.8 = 59,然后用56/59 = 94.9%算出結果。
可以看出蘋果中的卡路里大部分來自于碳水化合物,而牛肉則不同。
對于其他食物,計算方法類似。首先,按列求和,計算每種食物中(100g)三種營養成分總和,然后分別用不用營養成分的卡路里數量除以總和,計算百分比。
那么,能否不使用for循環完成這樣的一個計算過程呢?
假設上圖的表格是一個4行3列的矩陣 AAA ,記為 A3?4A_{3*4}A3?4? ,接下來我們要使用Python的numpy庫完成這樣的計算。我們打算使用兩行代碼完成,第一行代碼對每一列進行求和,第二行代碼分別計算每種食物每種營養成分的百分比。
在jupyter notebook中輸入如下代碼,按shift+Enter運行,輸出如下。
下面使用如下代碼計算每列的和,可以看到輸出是每種食物(100g)的卡路里總和。
其中sum的參數axis=0表示求和運算按列執行,之后會詳細解釋。
接下來計算百分比,這條指令將 3?43*43?4 的矩陣 AAA 除以一個 1?41*41?4 的矩陣,得到了一個 3?43*43?4 的結果矩陣,這個結果矩陣就是我們要求的百分比含量。
下面再來解釋一下A.sum(axis = 0)中的參數axis。axis用來指明將要進行的運算是沿著哪個軸執行,在numpy中,0軸是垂直的,也就是列,而1軸是水平的,也就是行。
而第二個A/cal.reshape(1,4)指令則調用了numpy中的廣播機制。這里使用 3?43*43?4 的矩陣 AAA 除以 1?41*41?4 的矩陣 calcalcal 。技術上來講,其實并不需要再將矩陣 calcalcal reshape(重塑)成 1?41*41?4 ,因為矩陣 calcalcal 本身已經是 1?41*41?4 了。但是當我們寫代碼時不確定矩陣維度的時候,通常會對矩陣進行重塑來確保得到我們想要的列向量或行向量。重塑操作reshape是一個常量時間的操作,時間復雜度是 O(1)O(1)O(1),它的調用代價極低。
那么一個 3?43*43?4 的矩陣是怎么和 1?41*41?4 的矩陣做除法的呢?讓我們來看一些更多的廣播的例子。
課程PPT
| 2.14 向量化 Logistic 回歸的梯度輸出 | 回到目錄 | 2.16 關于 Python Numpy 向量的說明 |
總結
以上是生活随笔為你收集整理的2.15 Python 中的广播-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.14 向量化 Logistic 回归
- 下一篇: 2.16 关于 Python Numpy