2017-08-08 221 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)可以做到這一點。 –