编辑:
即使问题中的问题已经更新,仍然可以使用代数方法来简化问题。您仍然不必为 3-D 矩阵而烦恼。你的结果将是这样的:
output = mean(v.^2).*A.^2 + 2.*mean(v.*w).*A.*B + mean(w.^2).*B.^2;
如果您的矩阵和向量很大,与使用BSXFUN或REPMAT的解决方案相比,由于所需的内存量减少,此解决方案将为您提供更好的性能。
解释:
假设M
是在沿第三维取平均值之前得到的 m×n×d 矩阵,这就是沿第三维的跨度将包含的内容:
M(i,j,:) = A(i,j).*v + B(i,j).*w;
换句话说,v
按比例缩放A(i,j)
的向量加上按比例缩放的w
向量B(i,j)
。这就是你应用元素平方时得到的结果:
M(i,j,:).^2 = (A(i,j).*v + B(i,j).*w).^2;
= (A(i,j).*v).^2 + ...
2.*A(i,j).*B(i,j).*v.*w + ...
(B(i,j).*w).^2;
现在,当您在第三个维度上取平均值时,每个元素的结果output(i,j)
将如下所示:
output(i,j) = mean(M(i,j,:).^2);
= mean((A(i,j).*v).^2 + ...
2.*A(i,j).*B(i,j).*v.*w + ...
(B(i,j).*w).^2);
= sum((A(i,j).*v).^2 + ...
2.*A(i,j).*B(i,j).*v.*w + ...
(B(i,j).*w).^2)/d;
= sum((A(i,j).*v).^2)/d + ...
sum(2.*A(i,j).*B(i,j).*v.*w)/d + ...
sum((B(i,j).*w).^2)/d;
= A(i,j).^2.*mean(v.^2) + ...
2.*A(i,j).*B(i,j).*mean(v.*w) + ...
B(i,j).^2.*mean(w.^2);