我有一个n乘d矩阵A,代表n个d维点。我有另一个m乘d矩阵B,代表m个d维点。
注意我知道如何使用循环来完成上述两个操作。但是在Matlab中,使用循环效率不高,所以我问这些问题。
谢谢!
答案 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);