'Python NumPy模塊廣播機制及規則詳解'

Python 廣播 數學 軟件測試開發技術棧 2019-08-08
"
"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

Python NumPy模塊廣播機制及規則詳解

執行上述代碼,輸出結果為

"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

Python NumPy模塊廣播機制及規則詳解

執行上述代碼,輸出結果為

Python NumPy模塊廣播機制及規則詳解

執行過程圖解如下:

"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

Python NumPy模塊廣播機制及規則詳解

執行上述代碼,輸出結果為

Python NumPy模塊廣播機制及規則詳解

執行過程圖解如下:

Python NumPy模塊廣播機制及規則詳解


廣播規則

當然,並不是所有結構的數組都可以進行運算,因此廣播需要滿足一定規則,廣播的規則如下:

  • 讓所有輸入數組都向其中shape最長的數組看齊,shape中不足的部分都通過在前面加1補齊。
  • 輸出數組的shape是輸入數組shape的各個軸上的最大值。
  • 如果輸入數組的某個軸和輸出數組的對應軸的長度相同或者其長度為1時,這個數組能夠用來計算,否則出錯。
  • 當輸入數組的某個軸的長度為1時,沿著此軸運算時都用此軸上的第一組值

簡單的說:當操作兩個數組時,Numpy會逐個比較它們的shape(構成的元組tuple),只有在下述情況下,兩arrays才符合廣播規則:

  • 相等。
  • 其中一個為1。

若條件不滿足,拋出 "ValueError: frames are not aligned" 異常。


可以觸發廣播機制的例子

"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

Python NumPy模塊廣播機制及規則詳解

執行上述代碼,輸出結果為

Python NumPy模塊廣播機制及規則詳解

執行過程圖解如下:

Python NumPy模塊廣播機制及規則詳解


廣播規則

當然,並不是所有結構的數組都可以進行運算,因此廣播需要滿足一定規則,廣播的規則如下:

  • 讓所有輸入數組都向其中shape最長的數組看齊,shape中不足的部分都通過在前面加1補齊。
  • 輸出數組的shape是輸入數組shape的各個軸上的最大值。
  • 如果輸入數組的某個軸和輸出數組的對應軸的長度相同或者其長度為1時,這個數組能夠用來計算,否則出錯。
  • 當輸入數組的某個軸的長度為1時,沿著此軸運算時都用此軸上的第一組值

簡單的說:當操作兩個數組時,Numpy會逐個比較它們的shape(構成的元組tuple),只有在下述情況下,兩arrays才符合廣播規則:

  • 相等。
  • 其中一個為1。

若條件不滿足,拋出 "ValueError: frames are not aligned" 異常。


可以觸發廣播機制的例子

Python NumPy模塊廣播機制及規則詳解

再來看一些不能觸發廣播機制的例子:

"
Python NumPy模塊廣播機制及規則詳解

廣播機制

廣播機制的功能是為了方便不同shape的array進行數學運算。

假設 N 是個2(行)* 3(列)的矩陣(shape=(2, 3)),M 是個長度為 2 的列向量(shape=(2, 1)),以線性代數的理論來講,它們是無法進行相加的,但在 Numpy 中可以,Numpy 會自動將 N 的每一列加上M,相等於 N 加上了 3 個 M 組成的矩陣,這就是 Numpy 的廣播機制(Broadcast),如下:

Python NumPy模塊廣播機制及規則詳解

執行上述代碼,輸出結果為

Python NumPy模塊廣播機制及規則詳解

執行過程圖解如下:

Python NumPy模塊廣播機制及規則詳解


廣播規則

當然,並不是所有結構的數組都可以進行運算,因此廣播需要滿足一定規則,廣播的規則如下:

  • 讓所有輸入數組都向其中shape最長的數組看齊,shape中不足的部分都通過在前面加1補齊。
  • 輸出數組的shape是輸入數組shape的各個軸上的最大值。
  • 如果輸入數組的某個軸和輸出數組的對應軸的長度相同或者其長度為1時,這個數組能夠用來計算,否則出錯。
  • 當輸入數組的某個軸的長度為1時,沿著此軸運算時都用此軸上的第一組值

簡單的說:當操作兩個數組時,Numpy會逐個比較它們的shape(構成的元組tuple),只有在下述情況下,兩arrays才符合廣播規則:

  • 相等。
  • 其中一個為1。

若條件不滿足,拋出 "ValueError: frames are not aligned" 異常。


可以觸發廣播機制的例子

Python NumPy模塊廣播機制及規則詳解

再來看一些不能觸發廣播機制的例子:

Python NumPy模塊廣播機制及規則詳解

最後,需要注意的時,觸發廣播機制的前提是兩個 ndarray 執行的是 element-wise(按位加,按位減)的運算,而不是矩陣乘法的運算,矩陣乘法運算時需要維度之間嚴格匹配。


"

相關推薦

推薦中...