鉴于我们有:
我想在没有循环的情况下评估以下代码:(或以更快的方式)
out = zeros(1,numSamples);
for i = 1:numSamples
res = sum(repmat(B - x(i,:), numSamples, 1)*A.*(x - repmat(x(i,:), numSamples, 1)), 2).^2;
out(i) = var(res);
end
如果您对快速改进上述内容有其他建议,那也非常受欢迎。
答案 0 :(得分:7)
你可以bsxfun
那些逐件用于矢量化解决方案 -
P1 = bsxfun(@minus,B,x)*A;
P2 = bsxfun(@minus,x,permute(x,[3 2 1]));
out = var(squeeze(sum(bsxfun(@times,P1,P2),2)).^2.');
部分向量化方法 -
P = (bsxfun(@minus,B,x)*A).'; %//'
out = zeros(1,numSamples);
for i = 1:numSamples
out(i) = var((bsxfun(@minus,x,x(i,:))*P(:,i)).^2);
end