Improvement of point cloud distance calculation in 2D
6 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
I have following question:
Given is an array of n- datapoints, with x and y coordinates for every point.
I know want to calculate the distance from every point to every other point.
For now the most efficient way for me is:
A=rand(5000,2);
Dista = squeeze(sqrt(sum((A - reshape(A',1,2,[])).^2,2)));
With increasing number of points this will take relativ long, and since i have to reapeat it inisde a loop it will in take to long in summary for me.
Theoretical, this could be optimized, since in my code above I calculate the distance from every point to everypoint, which is a waste of approximatly 50% (for an infinite number of points) of the calculations, since 50% of the calculations are done twice since the distcance from point A to point B is equal to B to A.
But how could I get this constraint inside my code, in best case without loops, since I guess, that this will slow it down in total.
All i have to do is to mirror the Dista matrix along the diagonal, but how do i manage that my code only calculates the uper(or lower) triangle of the matrix, in vectorized form.
Many thanks in advance.
Best regards
Marc
6 个评论
Tommy
2020-4-25
Good point about the sqrt.
Try switching the order, you might find that the second line is always quicker than the first.
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!