我有一个矩阵,其中包含5个点的几何坐标。
centroids = [x1,x2;...;x5,y5]
我想构建一个包含所有其他点距离的矩阵。
distance =
inf pt1-pt2 pt1-pt3 pt1-pt4 pt1-pt5
pt2-pt1 inf pt2-pt3 pt2-pt4 pt2-pt5
pt3-pt3 pt3-pt2 inf pt3-pt4 pt3-pt5
pt4-pt1 pt4-pt2 pt4-pt3 inf pt4-pt5
pt5-pt1 pt5-pt2 pt5-pt3 pt5-pt4 inf
我使用inf因为那时我想用每行的索引[value,index] = min(distance(.....))取min。
目标是有一个这样的最终矩阵:
result =
indice_of_the_closest dist
indice_of_the_closest dist
indice_of_the_closest dist
indice_of_the_closest dist
indice_of_the_closest dist
我通过循环实现这一点,但我需要一些帮助才能在没有循环的情况下执行此操作。
祝你好运
答案 0 :(得分:3)
如果您没有统计工具箱,则可以执行此类操作
% Compute the pair-wise distances
d = sqrt((x(:,1) - x(:,1).').^2 + (x(:,2) - x(:,2).').^2);
% If you are on MATLAB < 2016b
% d = sqrt(bsxfun(@minus, x(:,1), x(:,1).').^2 + bsxfun(@minus, x(:,2), x(:,2).').^2);
% Set the diagonal to Inf
d(logical(eye(size(d)))) = Inf;
% Find the minimum distance and index
[mindist, ind] = min(d, [], 1);
% Create the output matrix
result = [ind(:), mindist(:)];
如果你做拥有统计工具箱,你可以使用knnsearch
找到每个点最近的两个点(第一个最接近的点是点本身)
[inds, dists] = knnsearch(x, x, 'k', 2);
result = [inds(:,2), dists(:,2)];