我有一个约144分的地区。我想要实现的是测量点与所有其他点的距离并将其存储在数组中。我想为所有要点做这件事。如果可能的话,我希望以不重复的方式存储这些数据。而且我应该可以进行如下查询:所有点之间的所有距离都不重复,所有距离为56号点的总和等。
我有一个3 * 144阵列,有两列存储点的坐标。
答案 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中所有点之间的所有成对距离。