标签: matlab multidimensional-array matrix-multiplication
我想知道是否有可能在不诉诸for循环的情况下执行多维矩阵乘法。给定N-by-P矩阵A和N-by-M-by-P矩阵B,我想计算M维向量y,在元素方面定义为
y(j) = sum_(i = 1,...,N) sum_(k = 1,...,P) A(i,k)*B(i,j,k)
答案 0 :(得分:3)
您可以将A线性化为行向量,然后reshape和permute数组B作为矩阵,以便所需的结果只是矩阵乘法:< / p>
A
reshape
permute
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以便其尺寸与B的尺寸对齐,使用bsxfun与单例展开相乘,并对两个所需尺寸求和:
bsxfun
result = sum(sum(bsxfun(@times, reshape(A, N, 1, P), B), 1), 3);