2017-08-09 176 views
1

我剛開始學習numpy,通過了numpy的scipy教程。我的問題涉及廣播發生的時間。在numpy廣播

正如tutorial建議,兩個數組是兼容的,如果他們遵循一定的條件,如:

  1. 他們是平等的
  2. 其中之一是1

我的問題是,假設我有以下兩個陣列:

import numpy as np 

c1 = np.arange(10).reshape(2,5) 
c2 = np.arange(8).reshape(2,4,1) 
c3 = c1-c2 

但是上面的操作給了我如下兼容/廣播錯誤:

ValueError: operands could not be broadcast together with shapes (2,5) (2,4,1) 

當我示意代表這兩個數組紙筆我得到的操作不能進行,但我不能從上面提到的教程,如何遵循操作未在陣列上成功執行。請幫助我理解。

我知道這是基本的東西,但這會有助於我的理解。

問候

+0

c2 = np.arange(8).reshape(4,2 ,1)而不是c2 = np.arange(8).reshape(2,4,1) –

+2

否副軸必須與其他副軸相匹配,在這種情況下,您有1個具有2列和5行的數組,以及另一個是2列4行,第三個軸是單一長度。如果你的第一個數組是'c1 = np.arange(8).reshape(4,2)',那麼這是不能被廣播的,那麼如果你看例子,這也是可行的:https://docs.scipy.org/doc /numpy/user/basics.broadcasting.html你的例子不符合任何可以工作的例子 – EdChum

+0

@GauravDhama是改變形狀的作品,但我正在專門尋找這種形狀。 –

回答

7

這是確定兩個數組的程序可以播放: 對準右對齊形狀:

2 5 
2 4 1 

添加1點的左邊,這樣既形狀有相同數量的軸(以下列爲列):

1 2 5 
2 4 1 

現在比較下面的列。對於廣播工作,每列中的值必須相同,否則其中一個值必須等於1.

在第二列中,2不等於4,因此無法進行廣播。 (在第一列和第三列中,1使這些軸與廣播兼容,但由於第二列,整個陣列不能廣播。)