计算区域中所有点的距离

时间:2013-01-23 15:41:31

标签: matlab matrix distance

我有一个约144分的地区。我想要实现的是测量点与所有其他点的距离并将其存储在数组中。我想为所有要点做这件事。如果可能的话,我希望以不重复的方式存储这些数据。而且我应该可以进行如下查询:所有点之间的所有距离都不重复,所有距离为56号点的总和等。

我有一个3 * 144阵列,有两列存储点的坐标。

3 个答案:

答案 0 :(得分:6)

一种可能的解决方案(尽管如此,我不清楚你的意思是不重复):

 X are your points with coordinates x = X(:,1), y = X(:,2)


 dist = sqrt(bsxfun(@minus,X(:,1),X(:,1)').^2 + bsxfun(@minus,X(:,2),X(:,2)').^2)

所以

dist(i,j) is the euclidean distance between i and j

当然矩阵是对称的。您可以轻松降低所涉及的复杂性。

答案 1 :(得分:2)

假设您的数组为A,其中每列存储单个点的坐标。要获得所有点对的组合(不重复),请使用nchoosek

pairs = nchoosek(1:size(A, 2), 2)

然后像这样计算Euclidean distance

dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1))

如果您安装了Statistics Toolbox,则可以使用pdist(A)代替相同的效果。

答案 2 :(得分:1)

如果您有统计工具箱,并且您拥有阵列X中的所有数据,那么

D = pdist(X)

给出X中所有点之间的所有成对距离。