Broadcasting in Python

定義:如果兩個數組的後緣維度的軸長度相符或其中一方的軸長度爲1,則認爲它們是廣播兼容的。廣播會在缺失維度和軸長度爲1的維度上進行。

要學習下 numpy 官方文檔裏關於 廣播機制相關的知識

https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.exp.html

矩陣 A_(m,n) 和矩陣 B_(1,n) 進行四則運算,後緣維度軸長度相符,可以廣播,廣播沿着軸長度爲1的軸進行,即 B_(1,n) 廣播成爲 B_(m,n)’ ,之後做逐元素四則運算。

矩陣 A_(m,n) 和矩陣 B_(m,1) 進行四則運算,後緣維度軸長度不相符,但其中一方軸長度爲1,可以廣播,廣播沿着軸長度爲1的軸進行,即 B_(m,1) 廣播成爲 B_(m,n)’ ,之後做逐元素四則運算。

矩陣 A_(m,1) 和常數R 進行四則運算,後緣維度軸長度不相符,但其中一方軸長度爲1,可以廣播,廣播沿着缺失維度和軸長度爲1的軸進行,缺失維度就是axis=0,軸長度爲1的軸是axis=1,即R廣播成爲 B_(m,1)’ ,之後做逐元素四則運算。

python
import numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])  #arr1.shape = (4,3)
arr2 = np.array([1, 2, 3])    #arr2.shape = (3,)
arr_sum = arr1 + arr2
print(arr_sum)

輸入結果如下:

[[1 2 3]
 [2 3 4]
[3 4 5]
[4 5 6]]

上例中arr1的shape爲(4,3),arr2的shape爲(3,)。可以說前者是二維的,而後者是一維的。但是它們的後緣維度相等,arr1的第二維長度爲3,和arr2的維度相同。arr1和arr2的shape並不一樣,但是它們可以執行相加操作,這就是通過廣播完成的,在這個例子當中是將arr2沿着0軸進行擴展。

在這裏插入圖片描述
同樣還有:
在這裏插入圖片描述 從上面的圖可以看到,(3,4,2)和(4,2)的維度是不相同的,前者爲3維,後者爲2維。但是它們後緣維度的軸長相同,都爲(4,2),所以可以沿着0軸進行廣播。

同樣,還有一些例子:(4,2,3)和(2,3)是兼容的,(4,2,3)還和(3)是兼容的,後者需要在兩個軸上面進行擴展。

數組維度相同,其中有個軸爲1

import numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])  #arr1.shape = (4,3)
arr2 = np.array([[1],[2],[3],[4]])    #arr2.shape = (4, 1)

arr_sum = arr1 + arr2
print(arr_sum)

輸出結果如下:
[[1 1 1]
 [3 3 3]
 [5 5 5]
 [7 7 7]]

arr1的shape爲(4,3),arr2的shape爲(4,1),它們都是二維的,但是第二個數組在1軸上的長度爲1,所以,可以在1軸上面進行廣播,如下圖所示:
在這裏插入圖片描述 在這種情況下,兩個數組的維度要保證相等,其中有一個軸的長度爲1,這樣就會沿着長度爲1的軸進行擴展。這樣的例子還有:(4,6)和(1,6) 。(3,5,6)和(1,5,6)、(3,1,6)、(3,5,1),後面三個分別會沿着0軸,1軸,2軸進行廣播。

參考鏈接

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