2014-03-03 146 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