正如我试图了解Python中的广播,我遇到了形状不匹配的错误。我知道这意味着我的阵列不适合维度。我的代码基本上试图做的阵列以下操作尺寸如下:Numpy广播阵列
(256,256,3)*(256,256)+(256,256)
我知道问题是乘法。我想知道是否有办法解决这个问题?我可以为乘法的(256,256)数组添加额外的维度吗?
正如我试图了解Python中的广播,我遇到了形状不匹配的错误。我知道这意味着我的阵列不适合维度。我的代码基本上试图做的阵列以下操作尺寸如下:Numpy广播阵列
(256,256,3)*(256,256)+(256,256)
我知道问题是乘法。我想知道是否有办法解决这个问题?我可以为乘法的(256,256)数组添加额外的维度吗?
比方说
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)
,与A
乘以其被广播给(256,256,3)
,和同样为C[..., np.newaxis]
。
B[..., np.newaxis]
也可以写成B[..., None]
- 因为np.newaxis
是None
。这有点短,但意图可能不太清楚。
非常感谢你! – user3303613
您可以使用'numpy.newaxis'添加新维度 –
请参阅文档和示例:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#numpy.newaxis –
您可以点击答案分数下的勾号图标接受答案。 – EdChum