Если у вас достаточно оперативной памяти, эффективный способ может быть
[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);