我有一个大小为(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中是否有任何等效的方法?
答案 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)