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兼容。

NumPy廣播