Improvement of point cloud distance calculation in 2D
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Tommy
il 25 Apr 2020
Good point about the sqrt.
Try switching the order, you might find that the second line is always quicker than the first.
Risposte (0)
Vedere anche
Categorie
Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!