多维矩阵乘法

Multidimensional 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)

您可以将 A 线性化为行向量,然后 reshape and 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与单例展开相乘,对两者求和所需尺寸:

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