如何在numpy中进行类似于dyadics的操作

时间:2016-02-17 12:48:18

标签: python numpy

我有两个二维数组AB。我想获得一个3-D数组C,它与AB的关系是:

C_mnl=A_mn*B_ml

我怎样才能在numpy中优雅地做到这一点?

2 个答案:

答案 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()

<强>解释

  1. C = A[...,None]*B[:,None,:] 添加一个新轴作为最后一个轴A[...,None](相当于np.newaxis)将所有现有尺寸推到前面。因此,这与None相同。
  2. A[:,:,None]类似,它会在现有维度之间添加新轴。
  3. 使用步骤B[:,None,:]1,我们将输入数组的轴对齐,因此当使用逐元乘法运算时,将导致2形状的所需输出{{ 1}}。