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에서 Get Started with MATLAB에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by