Python Numpy广播阵列
当我试图理解python中的广播时,我遇到了一个形状不匹配错误。我知道这意味着我的数组在维度上不适合。我的代码基本上尝试对具有以下维度的数组执行以下操作: (256256,3)*(256256)+(256256) 我知道问题在于乘法运算。我想知道有没有办法解决这个问题?我能给乘法的(256256)数组增加一个额外的维数吗?比方说Python Numpy广播阵列,python,arrays,numpy,Python,Arrays,Numpy,当我试图理解python中的广播时,我遇到了一个形状不匹配错误。我知道这意味着我的数组在维度上不适合。我的代码基本上尝试对具有以下维度的数组执行以下操作: (256256,3)*(256256)+(256256) 我知道问题在于乘法运算。我想知道有没有办法解决这个问题?我能给乘法的(256256)数组增加一个额外的维数吗?比方说 A.shape = (256,256,3) B.shape = (256,256) C.shape = (256,256) 默认情况下,在左侧添加轴,以便 这将导致B
A.shape = (256,256,3)
B.shape = (256,256)
C.shape = (256,256)
默认情况下,在左侧添加轴,以便
这将导致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]
具有形状(256256,1)
,当与A
相乘时,该形状被广播到(256256,3)
,对于C[…,np.newaxis]
B[…,np.newaxis]
也可以写成B[…,None]
——因为np.newaxis
是None
。它稍微短了一点,但意图可能不太清楚。您可以使用numpy.newaxis
添加新维度请在此处查看文档和示例:您可以通过单击答案分数下的勾号图标来接受答案。