2016-11-06 194 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);