2017-08-08 117 views
1

我有一个大小为(5,7,3)的矩阵A和大小为(5,3,8)的矩阵B.我想把它们乘以C = A.B,C的大小是(5,7,8)numpy和theano的3D矩阵乘法

这意味着矩阵A中一个尺寸为(7,3)的2D子矩阵将分别乘以矩阵B中尺寸为(3,8)的一个2D子矩阵。所以我必须乘以5次。

最简单的方法是使用一个循环,并numpy的:

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

有没有办法做到这一点不使用循环? 在没有使用扫描的情况下,Theano中是否有任何等效的方法?

回答

2

可以很简单地用np.einsum在numpy中完成。

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

它也可以简单地是:

C = numpy.matmul(A,B) 

由于docs状态:

如果两个参数是ND,N> 2,它被视为基质的驻留在堆栈在最后两个索引中并相应播出

Th eano有batched_dot类似functionaly所以这将是

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

在Theano,我发现theano.tensor.batched_dot(X,Y)可以做到这一点。 –