【问题标题】:Fastest way to compute dsitance between a list of pair of points计算点对列表之间距离的最快方法
【发布时间】:2016-04-29 09:17:43
【问题描述】:

我在 k 维空间中有 n 个点(n x k 数据点矩阵)。此外,我有一个长度为 d 的点对列表(列表矩阵的维度是 d 乘以 2)。

我的目标是在长度为 d 的向量中找到该列表中每对点之间的欧几里得距离。

对于长列表,在 MATLAB 中执行此操作的最快方法是什么?你认为使用 C++/python 可能会加快很多速度吗?

【问题讨论】:

  • 不清楚你想要什么,以及这两个矩阵是如何相关的。能给我举个例子吗?可能pdist2会有用
  • 更像 pdist,但 pdist 给了我们一个 n × n 矩阵(所有对之间的距离)。我想要的只是 n x n 矩阵的几个元素(其索引已提供给我们),这几个元素是两个很多,但是,它们比 n(n-1)/2 小得多。当然我可以通过 for 循环来做到这一点,但我想知道是否有更快的方法。

标签: matlab optimization


【解决方案1】:
A = [22 44];
B= [44 66];
tic
distAB = sqrt((A(1)-B(1))^2+(A(2)-B(2))^2)
toc
distAB =

   31.1127

Elapsed time is 0.004398 seconds.

嗯,MATLAB 非常快。只需创建一个 for 循环并随着时间的推移更新您的积分。

你的代码应该是这样的:

for i=1:length(d)-1
distAB(i)=sqrt((d(1,i+1)-d(1,i))^2+(d(2,i+1)-d(2,i))^2)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多