MATLAB: How to reduce the executation time for the below operation

how to reduce the executation time for the below operationMATLAB

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 ?

Best Answer

  • 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.