多维矩阵乘法



我想知道是否有可能在不诉诸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线性化为行向量,然后将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,使其维度与B对齐,使用bsxfun与单例展开相乘,并对两个所需维度求和:

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

相关内容

  • 没有找到相关文章

最新更新