Python中Numpy的廣播機制

最易懂,最正確的廣播機制

各位,來了,就千萬別走,保證你會有收穫

注意,本文是絕對正確的廣播機制
廣播的原則,就2點:

  • 數組維數不相等,但後緣維度的軸長相等
  • 有一方長度爲1

只要兩個原則符合一個就滿足廣播條件
在解釋之前,先知道numpy的獲取數組形狀的屬性,shape屬性是數組的形狀,類型爲元組tuple

接下來,好好解釋一下這兩點。

  • 第一點:數組維數不相等,就是shape返回的元組的長度不相等。len(np1.shape) == len(np2.shape),相等那麼維數相等,否則維數不相等,我們的原則是長度不相等。接下來是後緣維度的軸長,就是shape的最後一個或幾個數字相同,如a.shape爲(4, 5, 6),b.shape爲(6,),維度不相等並且那麼最後一個數字6相同,可以。再來,如a的shape爲(3, 4, 6),b的shape爲(4, 6),維數不等,後緣維度4和6相等,可以。再來,a的shape爲(3, 4, 6),b的shape爲(3, 6),維數不等,雖然最後一個數字相等,但是倒數第二個數字不相等,所以後緣維度的軸長不相等,且沒有1(下面的第二點)不可以。
  • 第二點:有一方長度爲1,這個包含2點。就是np.shape後得到的兩個a, b元組中,b要麼有1,要麼和a的對應維度上的數字相同。如a的shape爲(4, 2, 5),b的shape爲(4, 1, 5),a和b中,第一個和第三個對應位置上的數字相等,而第二個b是1,符合廣播原則。再來,a的shape爲(3, 6, 3, 2),b的shape爲(3, 6, 1, 1),第一個和第二個對應位置相等,而b的後2個爲1(數量>=1),符合規則。再來,a的shape爲(4, 5, 3),b的shape爲(1, 1, 2),不行,第三個位置上對應數字不相等。再來,a的shape爲(6, 8, 9),b的shape爲(2, 3, 4),不行,對應位置不相等,且沒有1。再來,如a的shape爲(4, 5, 7),b的shape爲(5, 1),那麼第二個對應位置數字相同,有1,可以。再來,a的shape爲(3, 1, 6),b的shape爲(4, 6),維數不等,最後一個對應位置爲6相等,且a中有1,可以。

注意上面這些例子,大家可以試一下,如:
按照這個格式去嘗試不同的shape,結果都爲1,那麼說明正確,報錯,那就錯了。

import numpy as np
a = np.zeros(shapeA)
b = np.ones(shapeB)
c = a + b
print(c)
print(c.shape)

還是,只要符合2個原則中的一個就可以,如果你覺得有收穫,就點個贊吧,讓更多的人看到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章