2017-12-02 199 views
1

假設我們創建numpy的陣列是這樣的:蟒 - numpy的 - 不同尺寸的numpy的陣列求和

x = np.linspace(1,5,5).reshape(-1,1) 

這導致這樣的:

array([[ 1.], 
    [ 2.], 
    [ 3.], 
    [ 4.], 
    [ 5.]]) 

現在我們添加此陣列的轉置它:

x + x.T 

導致此:

array([[ 2., 3., 4., 5., 6.], 
    [ 3., 4., 5., 6., 7.], 
    [ 4., 5., 6., 7., 8.], 
    [ 5., 6., 7., 8., 9.], 
    [ 6., 7., 8., 9., 10.]]) 

我不明白這是因爲兩個數組有不同的維數(5x1和1x5),並且我在線性代數中學習到我們只能在矩陣具有相同維數時求和。

編輯:好,謝謝,明白了

+5

請'broadcasting'讀了做 - https://docs.scipy.org/doc/numpy- 1.13.0 /用戶/ basics.broadcasting.html。 – Divakar

+0

可能重複的[numpy的數組廣播規則(https://stackoverflow.com/questions/11178179/numpy-array-broadcasting-rules) – FTP

+0

而不是添加的「編輯:好,謝謝,明白了」你的問題,請註明答案(如下)是正確的。 –

回答

1

在這裏,我們有

x = array([[ 1.],[ 2.],[ 3.],[ 4.],[ 5.]]) 
x.T = array([[ 1., 2., 3., 4., 5.]]) 

現在你嘗試添加不同尺寸的兩個矩陣(1×5)和(5×1) 。

方式numpy的處理,這是通過複製在其列第一矩陣的每一行中的元素,以在其行匹配沒有第二矩陣的各列匹配數第二矩陣和複印元件的列。第一矩陣的行。這給你2×5×5矩陣可以加在一起。

元素明智除了作爲

array([[ 1., 1., 1., 1., 1.],[ 2., 2., 2., 2., 2.,],[ 3., 3., 3., 3., 3.,],[4., 4., 4., 4., 4.],[ 5., 5., 5., 5., 5.,]]) + array([[ 1., 2., 3., 4., 5.],[ 1., 2., 3., 4., 5.],[ 1., 2., 3., 4., 5.],[ 1., 2., 3., 4., 5.],[ 1., 2., 3., 4., 5.]]) 

產生的結果

array([[ 2., 3., 4., 5., 6.], 
    [ 3., 4., 5., 6., 7.], 
    [ 4., 5., 6., 7., 8.], 
    [ 5., 6., 7., 8., 9.], 
    [ 6., 7., 8., 9., 10.]])