Calculating euclidean distances in a matrix
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have to a matrix n x 2 in which each row represent a point in a Cartesian space in X and Y. The distance I have to calculate is between a row and its follower so at the end I have an array (n-1) x 1. I ve coded a simply function but since n = 50 000 it takes a lot of time to compute. How to speed up the entire process?
That s my function:
function [Dist] = Distances(A)
n = length(A)
Dist = (n -1);
for i=1:n
if i == n
break
end
Dist(i,1)= sqrt((A(i+1,1)- A(i,1))^2 + (A(i+1,2)- A(i,2))^2)
i= i+1
end
0 comentarios
Respuestas (2)
KSSV
el 16 de Dic. de 2020
Editada: KSSV
el 16 de Dic. de 2020
% demo data
n = 100 ;
A = rand(n,2) ;
dA = diff(A) ;
d = sqrt(sum(dA.^2,2)) ;
1 comentario
Image Analyst
el 16 de Dic. de 2020
This is what I'd do too. It's fast:
tic
n = 50000; % fifty thousand
xy = rand(n,2);
dxy = diff(xy);
d = sqrt(sum(dxy.^2,2));
toc
On my computer it takes 0.003 seconds for 50,000 rows.
Star Strider
el 16 de Dic. de 2020
Example —
x = randi(99, 5, 2); % Create Matrix
d = pdist(x);
m = squareform(d);
The information you want are in the upper and lower diagonals of ‘m’, so:
Result = diag(m,1);
equivalently:
Result = diag(m,-1);
This is likely faster than an explicit loop, however I did not time it with a large matrix.
0 comentarios
Ver también
Categorías
Más información sobre Statistics and Machine Learning Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!