2016-11-06 198 views
2

我想知道是否可以執行多維矩陣乘法而不訴諸for-loop。給定的N由-P矩陣A和N通過-M-通過-P矩陣B,I要計算M維矢量y,定義逐元素作爲多維矩陣乘法

y(j) = sum_(i = 1,...,N) sum_(k = 1,...,P) A(i,k)*B(i,j,k) 

回答

3

可以線性化A成一個行向量,然後reshapepermute陣列B作爲基質,從而使期望的結果是公正的矩陣乘法:

M = 5; 
N = 6; 
P = 8; 
A = rand(N,P); 
B = rand(N,M,P); 
result = A(:).'*reshape(permute(B, [1 3 2]), [], M); 

或者reshape矩陣A使得其尺寸與那些對準,使用bsxfun與單體擴展相乘,然後求和兩個所需的維度:

result = sum(sum(bsxfun(@times, reshape(A, N, 1, P), B), 1), 3);