多维矩阵乘法

时间:2016-11-06 23:53:14

标签: 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)

1 个答案:

答案 0 :(得分:3)

您可以将A线性化为行向量,然后reshapepermute数组B作为矩阵,以便所需的结果只是矩阵乘法:< / p>

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与单例展开相乘,并对两个所需尺寸求和:

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