【问题标题】:Calculating distance of all the points in a region with each other计算区域内所有点之间的距离
【发布时间】:2013-01-23 15:41:30
【问题描述】:

我有一个大约有 144 个点的区域。我想要实现的是测量一个点与所有其他点的距离并将其存储在一个数组中。我想对所有点都这样做。如果可能的话,我想以不重复的方式存储这些数据。而且我应该能够进行查询,例如 - 所有点之间的所有距离而不重复,点 no56 的所有距离之和等。

我有一个 3*144 数组,其中两列存储点的坐标。

【问题讨论】:

标签: matlab matrix distance


【解决方案1】:

一个可能的解决方案(不过,我不太清楚你所说的不重复是什么意思):

 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 到 B 的距离与 B 到 A 的距离相同,因此不应计入。
  • @Vikram,对,矩阵确实是对称的。顺便说一句,对于少数点(如 144),这种更类似于蛮力的方法可能比更智能的方法更快。试试看吧。
【解决方案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) 代替,以获得相同的效果。

【讨论】:

  • 我有 pdist 功能。 [pdist(A)][4] 中的 [4] 说明了什么?
  • @Vikram 这只是一个打字错误(我试图创建一个指向pdist 官方文档的超链接)。应该是pdist(A)。固定。
【解决方案3】:

如果你有统计工具箱,并且你的所有数据都在数组 X 中,那么

D = pdist(X)

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

【讨论】:

猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2010-10-30
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多