目前,我正试图通过这个三重循环构建矩阵Alpha:
Alpha = zeros(a_length, b_length);
for a = 1:a_length
for b = 1:b_length
for c = 1:c_length
Alpha(a,b) = Alpha(a,b) + Beta(c,a) * Gamma(b,c);
end
end
end
有没有办法将两个向量传递给Beta和Gamma矩阵,这样我就可以在一个优雅代码的矢量化线中构造整个Alpha?
答案 0 :(得分:4)
你可以使用简单的matrix multiplication
来救援 -
Alpha = (Gamma*Beta).'
或者这样 -
Alpha = Beta.'*Gamma.'
或者基于bsxfun
的方法有点复杂 -
Alpha = sum(bsxfun(@times,permute(Gamma,[3 1 2]),permute(Beta,[2 3 1])),3)
如果您想避免早期permute
方法中的一个bsxfun
-
Alpha = squeeze(sum(bsxfun(@times,Gamma,permute(Beta,[3 1 2])),2)).'
或者这个 -
Alpha = squeeze(sum(bsxfun(@times,Beta.',permute(Gamma,[3 2 1])),2))