Numpy中的廣播Broadcast用法

2021-08-18 20:10:28 字數 2370 閱讀 6493

廣播僅僅是一組用於在不同大小的陣列上應用二元ufuncs(加法、減法、乘法等)的規則。

對於相同大小的陣列,二元操作按元素逐元素執行。

in[1]: import numpy as np

in[2]: a = np.array([0, 1, 2])

b = np.array([5, 5, 5])

a + b

out[2]: array([5, 6, 7])

廣播允許在不同大小的陣列上執行這些型別的二元操作。

在numpy中,廣播遵循一組嚴格的規則來確定兩個陣列之間的操作:

規則1:如果兩個陣列在維度的數量上有差異,那麼維度較少的陣列的形狀就會被用1填充在它的前導(左)邊

規則2:如果兩個陣列的形狀在任何維度上都不匹配,但等於1,那麼在這個維度中,形狀為1的陣列將被拉伸以匹配另乙個形狀。

規則3:如果在任何維度上,大小都不一致,且兩者都不等於1,就會出現錯誤。

下面看例子:

in[1]: import numpy as np

in[2]: m = np.ones((2, 3))

a = np.arange(3)

in [3]: m.shape

out[3]: (2, 3)

in [4]: a.shape

out[4]: (3,)

根據規則1,陣列a的維數更少,所以我們用1填充在它的左邊。

m.shape -> (2, 3)

a.shape -> (1, 3)

根據規則2,我們現在看到第乙個維度不匹配,所以我們擴充套件這個維度來匹配。

m.shape -> (2, 3)

a.shape -> (2, 3)

現在就可以相加了,而且最終的shape是(2, 3)。我們驗證一下:

in [5]: (m + a).shape

out[5]: (2, 3)

再看乙個例子:

in[6]: a = np.arange(3).reshape((3, 1))

b = np.arange(3)

in [7]: a.shape

out[7]: (3, 1)

in [8]: b.shape

out[8]: (3,)

根據規則1,陣列b的維數更少,所以我們用1填充在它的左邊。

a.shape -> (3, 1)

b.shape -> (1, 3)

規則2告訴我們,我們將每乙個是1的都公升級,以匹配另乙個陣列的相應大小。

a.shape -> (3, 3)

b.shape -> (3, 3)

現在可以相加了,驗證下:

in [9]: (a + b).shape

out[9]: (3, 3)

下面看乙個滿足規則3的例子:

in [15]: m = np.ones((3, 2))

in [16]: a = np.arange(3)

in [16]: m.shape

out[16]: (3, 2)

in [17]: a.shape

out[17]: (3,)

根據規則1,

m.shape -> (3, 2)

a.shape -> (1, 3)

根據規則2,a的第乙個維度被拉伸到與m匹配:

m.shape -> (3, 2)

a.shape -> (3, 3)

現在根據規則3,如果我們進行加的操作,會出現錯誤,驗證下:

in [18]: m + a

traceback (most recent call last):

file "", line 1, in m + a

valueerror: operands could not be broadcast together with shapes (3,2) (3,)

注意這裡可能出現的混淆:你可以想象出a和m的相容性,比方說,用1在右邊而不是左邊填充a。但這不是廣播規則的工作方式!還要注意的是,雖然我們一直在關注+運算子,但是這些廣播規則適用於任何二元ufunc。

參考:《python data science handbook》

numpy中的廣播機制

numpy兩個陣列的相加 相減以及相乘都是對應元素之間的操作。import numpy as np x np.array 2,2,3 1,2,3 y np.array 1,1,3 2,2,4 print x y numpy當中的陣列相乘是對應元素的乘積,與線性代數當中的矩陣相乘不一樣 輸入結果如下 ...

numpy中的廣播機制

結論 廣播原則 如果兩個陣列的後緣維度 即 從末尾開始算起的維度 的軸長相符或其中一方的長度為1,則認為它們是廣播相容的,廣播會在缺失和 或 長度為1的軸上進行.1.讓所有輸入陣列都向其中shape最長的陣列看齊,shape中不足的部分都通過在前面加1補齊 2.輸出陣列的shape是輸入陣列shap...

Python 中 NumPy 的廣播

廣播描述了 numpy 如何在算術運算期間處理具有不同形狀的陣列。為了實現形狀相容,較小的陣列仍在較大的陣列上 廣播 廣播提供了一種向量化陣列操作的方法,以便在 c 而不是 python 中進行迴圈。numpy 通常在逐個元素的基礎上對陣列對進行操作。在最簡單的情況下,兩個陣列必須具有完全相同的形狀...