鉴于我们有:


x是2d矩阵,大小为[numSamples x numFeatures]
A是尺寸为[numFeatures x numFeatures]的2d方阵
B是大小为[1 x numFeatures]的一维向量


我想评估以下代码而无需循环:(或以一种更快的方式)

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


如果您有其他建议可以更快地改善上述要求,也非常欢迎。

最佳答案

您可以逐段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

08-25 06:16