numpy中的廣播機制

2021-08-20 01:45:45 字數 2342 閱讀 5342

numpy兩個陣列的相加、相減以及相乘都是對應元素之間的操作。

import

numpy as np

x = np.array([[2,2,3],[1,2,3]])

y = np.array([[1,1,3],[2,2,4]])

print(x*y) #

numpy當中的陣列相乘是對應元素的乘積,與線性代數當中的矩陣相乘不一樣

輸入結果如下:

『『『[[ 2 2 9]

[ 2 4 12]]

『『『

當兩個陣列的形狀並不相同的時候,我們可以通過擴充套件陣列的方法來實現相加、相減、相乘等操作,這種機制叫做廣播(broadcasting)。

比如,乙個二維陣列減去列平均值,來對陣列的每一列進行距平化處理:

import

numpy as np

arr = np.random.randn(4,3)  #

shape(4,3)

arr_mean = arr.mean(0) #

shape(3,)

demeaned = arr -arr_mean

很明顯上式arr和arr_mean維度並不形同,但是它們可以進行相減操作,這就是通過廣播機制來實現的。

如果兩個陣列的後緣維度(trailing dimension,即從末尾開始算起的維度)的軸長度相符,或其中的一方的長度為1,則認為它們是廣播相容的。廣播會在缺失和(或)長度為1的維度上進行。

這句話乃是理解廣播的核心。廣播主要發生在兩種情況,一種是兩個陣列的維數不相等,但是它們的後緣維度的軸長相符,另外一種是有一方的長度為1。

我們來看乙個例子:

import

numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]]) #

arr1.shape = (4,3)

arr2 = np.array([1, 2, 3]) #

arr2.shape = (3,)

arr_sum = arr1 +arr2

print

(arr_sum)

輸入結果如下:

『『『[[1 2 3]

[2 3 4]

[3 4 5]

[4 5 6]]

『『『

上例中arr1的shape為(4,3),arr2的shape為(3,)。可以說前者是二維的,而後者是一維的。但是它們的後緣維度相等,arr1的第二維長度為3,和arr2的維度相同。arr1和arr2的shape並不一樣,但是它們可以執行相加操作,這就是通過廣播完成的,在這個例子當中是將arr2沿著0軸進行擴充套件。

上面程式當中的廣播如下圖所示:

同樣的例子還有:

從上面的圖可以看到,(3,4,2)和(4,2)的維度是不相同的,前者為3維,後者為2維。但是它們後緣維度的軸長相同,都為(4,2),所以可以沿著0軸進行廣播。

同樣,還有一些例子:(4,2,3)和(2,3)是相容的,(4,2,3)還和(3)是相容的,後者需要在兩個軸上面進行擴充套件。

我們來看下面的例子:

import

numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]]) #

arr1.shape = (4,3)

arr2 = np.array([[1],[2],[3],[4]]) #

arr2.shape = (4, 1)

arr_sum = arr1 +arr2

print

(arr_sum)

輸出結果如下:

[[1 1 1]

[3 3 3]

[5 5 5]

[7 7 7]]

arr1的shape為(4,3),arr2的shape為(4,1),它們都是二維的,但是第二個陣列在1軸上的長度為1,所以,可以在1軸上面進行廣播,如下圖所示:

後話:還有上面兩種結合的情況,如(3,5,6)和(1,6)是可以相加的。在tensorflow當中計算張量的時候也是用廣播機制,並且和numpy的廣播機制是一樣的。

numpy中的廣播機制

結論 廣播原則 如果兩個陣列的後緣維度 即 從末尾開始算起的維度 的軸長相符或其中一方的長度為1,則認為它們是廣播相容的,廣播會在缺失和 或 長度為1的軸上進行.1.讓所有輸入陣列都向其中shape最長的陣列看齊,shape中不足的部分都通過在前面加1補齊 2.輸出陣列的shape是輸入陣列shap...

numpy廣播機制

1.廣播法則是為了更好的處理不同維數矩陣之間的運算 1 廣播第一法則是,如果所有的輸入陣列維度不都相同,乙個 1 將被重複地新增在維度較小的陣列上直至所有的陣列擁有一樣的維度。2 廣播第二法則確定長度為1的陣列沿著特殊的方向表現地好像它有沿著那個方向最大形狀的大小。對陣列來說,沿著那個維度的陣列元素...

Numpy中的廣播原則 機制

為了了解這個原則,首先我們來看一組例子 陣列直接對乙個數進行加減乘除,產生的結果是陣列中的每個元素都會加減乘除這個數。in 12 import numpy as np in 13 a np.arange 1,13 reshape 4,3 in 14 a 2 out 14 array 2,4,6 8,...