【发布时间】:2014-08-28 13:34:00
【问题描述】:
我正在寻找一种有效的方法来使用 MATLAB 计算大小为 (nodeCount x 2) 的坐标矩阵中所有点之间的成对距离。我不想计算两次成对距离(例如,节点 1-2 之间和节点 2-1 之间)。我构建了一个外部“for”循环,该循环通过每个节点递增,内部循环仅评估索引号较高的节点。结果是由节点间隔距离填充的上三角矩阵。我想向量化这些计算,或者至少提高这个操作的效率。任何帮助,将不胜感激。
gap = 10;
for s = 1:(nodeCount);
for ss = s+1:(nodeCount);
if abs(nodeCoord(s,1)-nodeCoord(ss,1)) < gap;
sep(s,ss) = sqrt((nodeCoord(s,1)-nodeCoord(ss,1))^2+(nodeCoord(s,2)-nodeCoord(ss,2))^2);
end
end
end
【问题讨论】:
-
很想看看这里发布的解决方案在效率方面如何为您服务!
-
大家好,感谢伟大的 cmets!我已经修改了我的原始代码,以显示一个我用来加快应用程序计算速度的技巧。我最感兴趣的是计算节点对之间的距离,这些节点对之间的距离由变量“gap”定义。我的代码中有一个额外的屏幕,可以过滤掉比“x”方向间隙更远的节点坐标,因此我进一步减少了计算时间和内存需求。我正在处理 10 的数千个节点,而这段代码是瓶颈。
-
您是否使用零预分配
sep?我问是因为如果条件 -if abs(nodeCoord(s,1)-nodeCoord(ss,1)) < gap不满足,那么sep(s,ss)必须是什么? -
你是对的。矩阵“sep”预先分配了零。
-
@MattM:介绍
gap你从根本上改变了问题。高效的实现基于 kD 树。这里讨论的所有解决方案基本上都具有 O(n^2) 运行时间,使用 kd-trees 和恒定数量的 neibours,您可以达到 O(nlogn)
标签: matlab vectorization