Clear Filters
Clear Filters

How to reduce the executation time for the below operation

1 view (last 30 days)
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 ?

Accepted Answer

Walter Roberson
Walter Roberson on 20 Apr 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 Comments
SatyaPrakash Gupta
SatyaPrakash Gupta on 20 Apr 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 on 22 Apr 2020
@Walter :
Thank you for the hint , i finally managed to use knnsearch to associate the locations.
thank you again

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!