我有两个二维数组A
和B
。我想获得一个3-D数组C
,它与A
和B
的关系是:
C_mnl=A_mn*B_ml
我怎样才能在numpy中优雅地做到这一点?
答案 0 :(得分:3)
numpy.einsum
可以做到这一点:
a = np.arange(6).reshape(3,2) # a.shape = (3, 2)
b = np.arange(12).reshape(3,4) # b.shape = (3, 4)
c = np.einsum('mn,ml->mnl', a, b) # c.shape = (3, 2, 4)
答案 1 :(得分:3)
您还可以使用broadcasting
-
pack()
<强>解释强>
C = A[...,None]*B[:,None,:]
添加一个新轴作为最后一个轴A[...,None]
(相当于np.newaxis
)将所有现有尺寸推到前面。因此,这与None
相同。A[:,:,None]
类似,它会在现有维度之间添加新轴。B[:,None,:]
和1
,我们将输入数组的轴对齐,因此当使用逐元乘法运算时,将导致2
形状的所需输出{{ 1}}。