我想知道是否有可能在不诉诸for循环的情况下执行多维矩阵乘法。给定n × p矩阵A和n × m × p矩阵B,我想计算m维向量y,将元素定义为
y(j) = sum_(i = 1,...,N) sum_(k = 1,...,P) A(i,k)*B(i,j,k)
您可以将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
与单例展开相乘,并对两个所需维度求和:
result = sum(sum(bsxfun(@times, reshape(A, N, 1, P), B), 1), 3);