numpy和theano中的3D矩阵乘法

时间:2017-08-08 10:04:20

标签: python numpy matrix theano.scan

我有一个大小为(5,7,3)的矩阵A和一个大小为(5,3,8)的矩阵B.我希望将它们乘以C = A.B,并且C的大小为(5,7,8)

这意味着矩阵A中具有大小(7,3)的一个2D子矩阵将分别与矩阵B中具有大小(3,8)的一个2D子矩阵相乘。所以我必须乘以5次。

最简单的方法是使用循环和numpy:

for u in range(5):
    C[u] = numpy.dot(A[u],B[u])

有没有办法在不使用循环的情况下执行此操作? 在没有使用扫描的情况下,Theano中是否有任何等效的方法?

1 个答案:

答案 0 :(得分:3)

可以在numpy中使用np.einsum非常简单地完成。

C = numpy.einsum('ijk,ikl->ijl', A, B)

它也可以简单地是:

C = numpy.matmul(A,B)

docs州以来:

  

如果任一参数是N-D,则N> 2,它被视为驻留在最后两个索引中的一堆矩阵并相应地进行广播

Theano具有与batched_dot类似的功能,因此它将是

C = theano.tensor.batched_dot(A, B)