计算矩阵数组与另一个矩阵的行或列的点积
Calculate the dot product of an array of matrices and the rows or columns of another matrix
有两个 ndarrays,数组 d
的形状为 (3,10,10) 和数组 e
的形状为 (3,10),如何计算第一个 10x10 的点积d
的矩阵和 e
的第一行,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.dot
和 np.tensordot
,并且在这样做之前还向 e
转置并添加了一个新轴,但我不知道如何解决这个问题。
我们可以使用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
。
有两个 ndarrays,数组 d
的形状为 (3,10,10) 和数组 e
的形状为 (3,10),如何计算第一个 10x10 的点积d
的矩阵和 e
的第一行,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.dot
和 np.tensordot
,并且在这样做之前还向 e
转置并添加了一个新轴,但我不知道如何解决这个问题。
我们可以使用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
。