4

我得到兩個3d矩陣A(32x3x3)和B(32x3x3),我想要得到維度爲32x3x3的矩陣C.計算可以使用循環完成,如:numpy多維(3d)矩陣乘法

a = numpy.random.rand(32, 3, 3) 
b = numpy.random.rand(32, 3, 3) 
c = numpy.random.rand(32, 3, 3) 

for i in range(32): 
    c[i] = numpy.dot(a[i], b[i]) 

我相信必須有一個更有效的單線解決方案來解決這個問題。任何人都可以幫忙,謝謝。

+2

你是指元素乘法,還是矩陣乘*層*? – AlvaroP

+0

爲什麼downvote?這個問題是明智而明確的,IMO。 – heltonbiker

+0

@AlvaroP由於OP使用'dot',看起來像是乘以層是意圖。我相信一些智能重塑/複合/重塑可以達到預期的效果,但不太確定。 – heltonbiker

回答

3

你可以做到這一點使用np.einsum

In [142]: old = orig(a,b) 

In [143]: new = np.einsum('ijk,ikl->ijl', a, b) 

In [144]: np.allclose(old, new) 
Out[144]: True 

一個優點使用einsum的是,你幾乎可以讀出什麼它從指數做:將第一軸單獨(i),並執行矩陣乘以最後兩個(jk,kl->jl))。