numpy陣列廣播詳解

2021-08-03 11:15:53 字數 1279 閱讀 7924

numpy陣列的廣播功能強大,但是也同時讓人疑惑不解,現在讓我們來談談其中的原理。

廣播原則:

如果兩個陣列的後緣維度(即:從末尾開始算起的維度)的軸長相符或其中一方的長度為1,則認為它們是廣播相容的,廣播會在缺失和(或)長度為1的軸上進行.

上面的原則很重要,是廣播的指導思想,下面我們來看看例子。

1.其實在最簡單的陣列與標量數字之間的運算就存在廣播,只是我們把它看作理所當然了。

2.再看下乙個例子,這個大家都會一致認為這是廣播了

根據廣播原則:arr1的shape為(4,1),arr2的shape為(3,),所以會同時在兩個軸發生廣播,arr1的shape變成(4,3),而arr2的shape變成(4,3),所以結果也為(4,3).

其實**中發生了下圖描述的事情:

3.同理,我們可以得到三維陣列的廣播情況

根據廣播原則分析:arr1的shape為(3,4,2),arr2的shape為(4,2),它們的後緣軸長度都為(4,2),所以可以在0軸進行廣播,arr2的shape變為(3,4,2).

下面說明一下三維陣列在各維度的廣播形狀需求:

以上所有形狀都可以發生廣播,你可以用我們開篇所說的廣播原則進行驗證。

最後,再來說乙個易錯的實際例子。

arr減去他在1軸上的平均值,會出錯?看看為啥。

因為arr.mean(1)產生的shape為(4,),根據廣播原則,較小的陣列的後緣維度必須為1,

所以需要將arr.mean變成(4,1),你所期望的結果如下:

參考:《利用python進行資料分析》

NumPy陣列廣播規則 python

numpy陣列遵循一組嚴格的規則,這組規則決定了兩個陣列之間的操作 1 如果兩個陣列的維度不同,小維度陣列將在最左邊補1 2 如果兩個陣列任何乙個維度都不匹配,陣列會擴充套件小的維度來和較大的那個陣列維度匹配 3 兩個陣列在任何乙個維度上都不匹配並且沒有任何乙個維度等於1,會引發異常 a np.ar...

Numpy陣列的廣播機制

numpy陣列不需要迴圈遍歷,即可對每個元素執行批量的算術運算操作 向量化運算 當兩個陣列大小 numpy.shape 不同時,進行算術運算會出現廣播機制。陣列在進行向量化運算的時,要求陣列形狀時相等的。當形狀不等的陣列執行算術運算的時候,就會出現廣播機制,該機制會對陣列進行擴充套件,使陣列的sha...

numpy廣播機制

1.廣播法則是為了更好的處理不同維數矩陣之間的運算 1 廣播第一法則是,如果所有的輸入陣列維度不都相同,乙個 1 將被重複地新增在維度較小的陣列上直至所有的陣列擁有一樣的維度。2 廣播第二法則確定長度為1的陣列沿著特殊的方向表現地好像它有沿著那個方向最大形狀的大小。對陣列來說,沿著那個維度的陣列元素...