计算矩阵数组与另一个矩阵的行或列的点积

时间:2019-10-12 13:12:07

标签: python numpy linear-algebra tensor dot-product

有两个ndarray,形状为(3,10,10)的数组d和形状(3,10)的数组e,如何计算的第一个10x10矩阵的点积de的第一行,d的第二个10x10矩阵和e的第二行,等等。

例如,具有以下两个数组:

d = np.array([np.diag([1,1,1,1,1,1,1,1,1,1]), 
              np.diag([2,2,2,2,2,2,2,2,2,2]), 
              np.diag([3,3,3,3,3,3,3,3,3,3])])     
e = np.arange(30).reshape((3,10))

如何计算3x10数组:

array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [20, 22, 24, 26, 28, 30, 32, 34, 36, 38],
       [60, 63, 66, 69, 72, 75, 78, 81, 84, 87]])

我尝试使用np.dotnp.tensordot,还尝试在e上移置并添加新轴,但是我不知道该如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

我们可以使用np.einsum-

np.einsum('ijk,ij->ik',d,e)

使用其optimize标志来使用BLAS。

np.matmul-

np.matmul(d,e[...,None])[...,0]

注意:在Python 3.x上,np.matmul可以替换为@ operator