術語廣播是指 NumPy 在算術運算期間處理不同形狀的陣列的能力。 對陣列的算術運算通常在相應的元素上進行。 如果兩個陣列具有完全相同的形狀,則這些操作被無縫執行。
import numpy as np
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print c
輸出如下:
[10 40 90 160]
如果兩個陣列的維數不相同,則元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以對形狀不相似的陣列進行操作,因為它擁有廣播功能。 較小的陣列會廣播到較大陣列的大小,以便使它們的形狀可相容。
如果滿足以下規則,可以進行廣播:
ndim
較小的陣列會在前面追加一個長度為 1 的維度。
輸出陣列的每個維度的大小是輸入陣列該維度大小的最大值。
如果輸入在每個維度中的大小與輸出大小匹配,或其值正好為 1,則在計算中可它。
如果輸入的某個維度大小為 1,則該維度中的第一個資料元素將用於該維度的所有計算。
如果上述規則產生有效結果,並且滿足以下條件之一,那麼陣列被稱為可廣播的。
陣列擁有相同形狀。
陣列擁有相同的維數,每個維度擁有相同長度,或者長度為 1。
陣列擁有極少的維度,可以在其前面追加長度為 1 的維度,使上述條件成立。
下面的例稱展示了廣播的範例。
import numpy as np
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]])
b = np.array([1.0,2.0,3.0])
print '第一個陣列:'
print a
print '\n'
print '第二個陣列:'
print b
print '\n'
print '第一個陣列加第二個陣列:'
print a + b
輸出如下:
第一個陣列:
[[ 0. 0. 0.]
[ 10. 10. 10.]
[ 20. 20. 20.]
[ 30. 30. 30.]]
第二個陣列:
[ 1. 2. 3.]
第一個陣列加第二個陣列:
[[ 1. 2. 3.]
[ 11. 12. 13.]
[ 21. 22. 23.]
[ 31. 32. 33.]]
下面的圖片展示了陣列b
如何通過廣播來與陣列a
相容。