Numpy广播阵列

时间:2014-03-03 19:59:02

标签: python arrays numpy

当我试图理解python中的广播时,我遇到了一个形状不匹配错误。我知道这意味着我所拥有的数组不符合维度。我的代码基本上尝试对具有以下维度的数组执行以下操作:

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

我知道问题在于乘法。我想知道是否有办法解决这个问题?我可以在乘法的(256,256)数组中添加额外的维度吗?

1 个答案:

答案 0 :(得分: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)形状,当与(256,256,3)相乘时会被广播到A,而C[..., np.newaxis]则相同。


B[..., np.newaxis]也可以写为B[..., None] - 因为np.newaxisNone。它有点短,但意图可能不那么明确。