對Numpy廣播操作的理解

2022-08-18 17:21:12 字數 785 閱讀 6616

1.首先檢查兩個矩陣維數是否相同,若不同,對維數少的補一。注意這裡的維數不是指n行d列中的n和d的值,對於一般的矩陣維數就是2。若乙個兩維的矩陣(n,d)和乙個一維的陣列(m,)相乘,補一操作就是將那個一維的陣列變為(1,m),補一總是在shape陣列的開始補一。

2.輸出陣列是輸入陣列各維度(軸)的最大值,例如(2,3)和(3,)相乘,首先做第一步的維度調整,修正為(2,3)和(1,3)。那麼第一維最大是在2和1中選2,第二維最大值是在3和3中選3。那麼輸出陣列維度是(2,3)

3.檢查輸入陣列各維的數和輸出陣列各維的關係,要麼相等,要麼為一。例如第二步中的例子輸入陣列(2,3)和輸出陣列(2,3)在各維上都是相等的,而(1,3)和(2,3)雖然第一維不相等,但是卻等於1,這也是可以計算的。再舉乙個反例(2,4)(3,),先做維度調整,變為(2,4)和(1,3),在計算輸出陣列的維度為(2,4),最後做第三步輸入陣列(2,4)和輸出陣列(2,4)相等,但輸入陣列(1,3)和輸出陣列(2,4)的第二維不相等也不等於1,所以計算失敗。

4.經過第三步,可以認為輸入的兩個陣列各維的數要麼相等要麼等於1。對於等於1的維度開始複製增補。例如(1,3)和(3,1)的輸出是(3,3)。對於(1,3)要對每一行複製,最終變為(3,3),例如[[2,3,4]]變為[[2,3,4],[2,3,4],[2,3,4]]。對於(3,1)要對每一列複製,最終變為(3,3),例如[[2],[3],[4]]]變為[[2,2,2],[3,3,3],[4,4,4]]。總之哪一維為1就對哪一維複製增補,直到輸入陣列的形狀(shape)和輸出陣列的形狀相同。完成了這一步,兩個陣列的shape就完全相同了,就可以執行普通的運算了

numpy廣播,掩碼操作

廣播操作 x np.arange 9 reshape 3,3 y x 3z np.arange 3 reshape 3,1 print x 3 標量廣播 print x z 向量廣播 print x 0,z 兩個陣列同時廣播 廣播規則 規則1 如果兩個陣列的維度數不同,則小維度陣列的shape將會在...

numpy的廣播規則

首先說一下numpy的廣播規則 1 如果兩個數的維度數不同,那麼小維度陣列的形狀將會在最左邊補1。2 如果兩個陣列的形狀在任何乙個維度都不匹配,那麼陣列的形狀會沿著維度為1的維度擴充套件以匹配另外乙個陣列的形狀。3 如果兩個陣列的形狀在任何乙個維度上都不匹配並且沒有任何乙個維度等於1,那麼會引發異常...

對numpy中shape的理解

from 環境 windows,python3.5 import numpy as np a np.array 2,3,33 a array 2 3 33 print a 2 3 33 a.shape 3,a.shape 0 3 a.shape 1 traceback most recent cal...