我对在单个矢量和矢量数组之间计算RMSE的最快方法有疑问。具体来说,我有一个代表一个点的向量A,并希望在A最接近的点的列表B中找到索引。现在我正在使用:
tempmat = bsxfun(@minus,A,B);
tempmat1 = sqrt(sum(tempmat.^2,2);
index = find(tempmat1 == min(tempmat1));
这需要大约0.058秒来计算索引。在MATLAB中有更快的方法吗?我进行了数百万次的计算。
非常感谢阅读, 乔
答案 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。