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進行數據分析》