How to reduce the executation time for the below operation

1 visualización (últimos 30 días)
Hi,
Loc = [m*n] ; % size of X has 1500000*2
image_spots = [m*n] ; % size of X has 500000*2
distance_thresh = 0.5;
mask = false([length(Loc),1]);
tic,for i = 1:length(Loc)
if distance_thresh > min(pdist2(Loc(i,:),image_spots))
mask(i)= true;
end
end,toc;
the above for loop take atleast 12mins, is there a method or a way where i can reduce the times for the executation ?

Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de Abr. de 2020
I suggest that you redesign to use knnsearch https://www.mathworks.com/help/stats/knnsearch.html asking for 1 neighbour, and comparing that one resulting distance to the threshold.
knnsearch with euclidean distance function and as few as 2 dimensions, will construct a quadtree to be able to find the distances much faster. It becomes like a 2D binary search.
  2 comentarios
SatyaPrakash Gupta
SatyaPrakash Gupta el 20 de Abr. de 2020
actually it is bit complicated because i used a grid to extract and filter from 1500000 and after that i got 500000 data and now i have to accociated this data into actual location , therefore redesigning would be not helpful i guess.
it means , there is no other mechanism to reduce the executation code for the above code provided right ?
SatyaPrakash Gupta
SatyaPrakash Gupta el 22 de Abr. de 2020
@Walter :
Thank you for the hint , i finally managed to use knnsearch to associate the locations.
thank you again

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Get Started with MATLAB en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by