MATLAB:在矢量和矢量数组之间进行均方根误差的最快方法

时间:2011-11-29 19:58:55

标签: search matlab vector find

我对在单个矢量和矢量数组之间计算RMSE的最快方法有疑问。具体来说,我有一个代表一个点的向量A,并希望在A最接近的点的列表B中找到索引。现在我正在使用:

    tempmat = bsxfun(@minus,A,B);
    tempmat1 = sqrt(sum(tempmat.^2,2);
    index = find(tempmat1 == min(tempmat1));

这需要大约0.058秒来计算索引。在MATLAB中有更快的方法吗?我进行了数百万次的计算。

非常感谢阅读, 乔

2 个答案:

答案 0 :(得分:4)

tempmat = bsxfun(@minus,A,B);
tmpmat1 = sum(tempmat.^2,2);
[m,index] = min(tempmat1);
m = sqrt(m); %# optional, only if you need the actual numerical value

这避免了在整个数组上计算sqrt,因为平方差异的最小值将具有相同的索引。它还使用min的第二个输出来避免find的第二次传递。

答案 1 :(得分:1)

你可能会发现

tempmat = A - B(ones(1, size(A,1)), :)

bsxfun版本快,除非大小(A,1)特别大。

这假设A是你的数组而B是你的向量。 RSS计算意味着您有行向量。

另外,我猜你知道你在计算RSS而不是RMS。