在Matlab中快速计算成对距离和最近邻居的方法?

时间:2012-02-29 02:38:20

标签: matlab

我有一个n乘d矩阵A,代表n个d维点。我有另一个m乘d矩阵B,代表m个d维点。

  1. 我想知道如何有效地计算m乘n矩阵,其(i,j) element表示第i行之间的欧几里德距离 矩阵A和第j行矩阵B?
  2. 如何有效地确定m个元素的向量,其k为k element表示最靠近第B行B?
  3. 的A行

    注意我知道如何使用循环来完成上述两个操作。但是在Matlab中,使用循环效率不高,所以我问这些问题。

    谢谢!

1 个答案:

答案 0 :(得分:2)

如果你有足够的RAM,可以采用有效的方式

[idxA,idxB] = ndgrid(1:n,1:m);

distMat = zeros(n,m);

distMat(:) = sqrt( sum((A(idxA,:) - B(idxB,:)).^2,2) );

你肯定应该分析这两个解决方案,因为循环可以充分优化,ndgrid解决方案更慢。

要在A中找到最接近B点的行,您可以使用min。请注意,这只会为每个点提供一个最小距离;如果您需要识别关系,则必须使用find

[minDist,closestRowsInA] = min(distMat,[],1);