Python 如何在numpy中进行类似二元运算的操作

Python 如何在numpy中进行类似二元运算的操作,python,numpy,Python,Numpy,我有两个二维阵列A和B。我想得到一个三维数组C,它与a和B的关系是: C_mnl=A_mn*B_ml 在numpy,我怎样才能优雅地做到这一点呢?我可以做到: 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) 你也可以使用

我有两个二维阵列
A
B
。我想得到一个三维数组
C
,它与
a
B
的关系是:

C_mnl=A_mn*B_ml
在numpy,我怎样才能优雅地做到这一点呢?

我可以做到:

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)
你也可以使用-

解释

  • A[…,None]
    添加一个新轴作为最后一个轴,并将所有现有尺寸推到前面。因此,这将与
    A[:,:,None]
    相同
  • B[:,None,:]
    类似,它在现有标注之间添加了一个新轴
  • 通过步骤
    1
    2
    ,我们将输入阵列的轴对齐,因此,当使用元素乘法操作时,将产生
    广播
    的形状
    (m,n,l)
    的所需输出

  • 看一看好的观点。有时候很容易错过简单的解决方案:)你能再解释一下吗?我已经搜索了文档,但似乎没有解释您的答案中
    None
    的用法。@ChongWang检查编辑是否有助于理解。
    C = A[...,None]*B[:,None,:]