当我试图理解python中的广播时,我遇到了一个形状不匹配错误。我知道这意味着我所拥有的数组不符合维度。我的代码基本上尝试对具有以下维度的数组执行以下操作:
(256,256,3)*(256256)+(256256)
我知道问题在于乘法。我想知道是否有办法解决这个问题?我可以在乘法的(256,256)数组中添加额外的维度吗?
答案 0 :(得分:3)
让我们说
A.shape = (256,256,3)
B.shape = (256,256)
C.shape = (256,256)
NumPy broadcasting默认情况下会在左侧上添加轴,所以
这会导致B
和C
被广播到
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.newaxis
是None
。它有点短,但意图可能不那么明确。