3
我有以下兩個數組與形狀:矩陣乘法與numpy.einsum
A = (d,w,l)
B = (d,q)
而且我想用這些形狀組合成一個3D陣列:
C = (q,w,l)
要多一點具體來說,在我的情況下,d(3D陣列的深度)是2,並且我首先想要在A的上層(因此d = 0)中將w * 1中的所有位置乘以B的第一個值最高行(所以d = 0,q = 0)。對於d = 1 I做的一樣,再總結兩個這樣:
C_{q=0,w,l} = A_{d=0,w,l}*B_{d=0,q=0} + A_{d=1,w,l}*B_{d=1,q=0}
我想通過利用numpy.einsum來計算℃。我想到了以下代碼:
A = np.arange(100).reshape(2,10,5)
B = np.arange(18).reshape(2,9)
C = np.einsum('ijk,i -> mjk',A,B)
其中ijk指2,10,5,mjk指9,10,5。但是我得到一個錯誤。有沒有辦法用numpy einsum來執行這種乘法?
感謝
快速的問題:你是從你的標串缺少'M' 。它應該是'np.einsum('ijk,im - > mjk',A,B)'?這會創建一個新的數組 - 這是你在找什麼? –
感謝您的回答,但如果我這樣做,我會得到以下錯誤: 操作數無法與重新映射的形狀一起廣播[原始 - >重新映射]:(2,10,5) - >(10,5,2) (9,2) - >(2,newaxis,newaxis,9) –
當我運行你的'我想到下面的代碼',但改變''ijk,我 - > mjk''爲''ijk,im - > mjk''(如@ajcr建議)我沒有收到錯誤。 – farenorth