我有一个包含约144个点的区域。我想要实现的是测量每个点与其他所有点的距离,并将其存储在数组中。我希望对所有点都进行这样的操作。如果可能,我希望以无重复的方式存储这些数据。并且我应该能够进行查询,比如:所有点之间的距离(无重复),第56个点的所有距离之和等等。
我有一个3*144的数组,其中两列存储了点的坐标。
我有一个3*144的数组,其中两列存储了点的坐标。
可能的解决方案(虽然我不是很清楚您所说的无重复指的是什么):
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
假设您的数组是A
,其中每列存储单个点的坐标。要获取所有点对的组合(不重复),请使用nchoosek
函数:
pairs = nchoosek(1:size(A, 2), 2)
然后按以下方式计算欧几里得距离:
dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1))
pdist(A)
来达到相同的效果。pdist
官方文档的超链接)。应该是 pdist(A)
。已修复。 - Eitan TD = pdist(X)
提供X中所有点之间的两两距离。
squareform
(可在此处找到所有内容)。参考本帖的答案,了解pdist
和其他“手动”解决方案的比较。+1 - chappjc