How to reduce the executation time for the below operation

1 次查看(过去 30 天)
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 ?

采纳的回答

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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by