NumPy廣播
NumPy - 廣播
術語廣播是指 NumPy 在算術運算期間處理不同形狀的數組的能力。 對數組的算術運算通常在相應的元素上進行。 如果兩個陣列具有完全相同的形狀,則這些操作被無縫執行。
示例 1
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 的維度,使上述條件成立。
下面的例稱展示了廣播的示例。
示例 2
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
兼容。