2014-03-03 203 views
2

正如我試圖瞭解Python中的廣播,我遇到了形狀不匹配的錯誤。我知道這意味着我的陣列不適合維度。我的代碼基本上試圖做的陣列以下操作尺寸如下:Numpy廣播陣列

(256,256,3)*(256,256)+(256,256)

我知道問題是乘法。我想知道是否有辦法解決這個問題?我可以爲乘法的(256,256)數組添加額外的維度嗎?

+0

您可以使用'numpy.newaxis'添加新維度 –

+0

請參閱文檔和示例:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#numpy.newaxis –

+0

您可以點擊答案分數下的勾號圖標接受答案。 – EdChum

回答

3

比方說

A.shape = (256,256,3) 
B.shape = (256,256) 
C.shape = (256,256) 

NumPy broadcasting增加對軸左默認,所以 將導致BC被廣播到

B.shape = (256,256,256) 
C.shape = (256,256,256) 

,並明確表示不工作,是不是你想要的,因爲有一個形狀不符合A.

所以,當你想在增加一個軸,使用B[..., np.newaxis]C[..., np.newaxis]

A*B[..., np.newaxis] + C[..., np.newaxis] 

B[..., np.newaxis]具有形狀(256,256,1),與A乘以其被廣播給(256,256,3),和同樣爲C[..., np.newaxis]


B[..., np.newaxis]也可以寫成B[..., None] - 因爲np.newaxisNone。這有點短,但意圖可能不太清楚。

+0

非常感謝你! – user3303613