廣播(Broadcasting)

NumPy 入門

Izzy Weber

Core Curriculum Manager, DataCamp

廣播簡介

 

兩個形狀不同的陣列相加的示意圖

NumPy 入門

純量的廣播

將 2D 陣列加上數字 2 的示意圖  

將 2D 陣列加上一個形狀相同、元素全為 2 的陣列的示意圖

NumPy 入門

相容性規則

  • NumPy 會自右向左比較陣列維度組  

 

 

 

 

將相容性規則套用到形狀為 (10, 5) 與 (10, 1) 的示意圖

NumPy 入門

相容性規則

  • NumPy 會自右向左比較陣列維度組
  • 兩個維度相容,當…
    • 其中一個長度為 1,或
    • 兩者長度相同
  • 所有維度組都必須相容

 

將相容性規則套用到形狀為 (10, 5) 與 (10, 1) 的示意圖

NumPy 入門

能廣播嗎?

 

可廣播的形狀:

  • (10, 5)(10, 1)
  • (10, 5)(5, )

 

不可廣播的形狀:

  • (10, 5)(5, 10)
  • (10, 5)(10, )
NumPy 入門

按列廣播(row-wise)

形狀為 (2, 5) 的陣列與形狀為 (1, 5) 的陣列相加

 

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1, 2, 3, 4])
array([[ 0,  2,  4,  6,  8],
       [ 5,  7,  9, 11, 13]])
NumPy 入門

按列廣播(row-wise)

 

 

形狀為 (2, 5) 的陣列與形狀為 (2, 5) 的陣列相加

NumPy 入門

不相容的廣播

 

將形狀為 (2, 5) 的陣列與形狀為 (2,) 的陣列相加會產生 ValueError 的示意圖

 

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1])
ValueError: operands could not be broadcast together with shapes (2,5) (2,) 
NumPy 入門

按欄廣播(column-wise)

形狀為 (2, 5) 的陣列與形狀為 (2, 1) 的陣列相加

array = np.arange(10).reshape((2, 5))
array + np.array([0, 1]).reshape((2, 1))
array([[ 0,  1,  2,  3,  4],
       [ 6,  7,  8,  9, 10]])
NumPy 入門

按欄廣播(column-wise)

 

 

將單欄陣列沿欄方向擴展至與較大陣列相同形狀的示意圖

NumPy 入門

其他運算子

形狀為 (2, 2) 的陣列乘上形狀為 (2, 1) 的陣列

從形狀為 (2, 2) 的陣列減去形狀為 (2, ) 的陣列

NumPy 入門

一起來練習吧!

NumPy 入門

Preparing Video For Download...