How to vectorise or speedup the code
    6 views (last 30 days)
  
       Show older comments
    
Hello. I have Lat(2689x1) Lon(2689x1) arrays that coordinaines coordinates of meteostations, and lat (1200x200) lon (1200x200) arrays with coordinates of satellite's measurements M(1200x200). I need to find elements of satelletes measurements, that  located closer then 0.25 deg to meteostations. What i've did:
k=1;
for m=1:length(Lat)
	x=lat-Lat(m);
	y=lon-Lon(m);
	[a,b]=find(abs((x))<=0.25 & abs((y))<=0.25);
        for n=1:length(a)
            Mes(k,n)=M(a(n),b(n))
        end
        St_N(k)=m;
        k=k+1;
end;
Because of many loops it works very long. Is there any way to vectorise or speedup this code?
0 Comments
Accepted Answer
  darova
      
      
 on 16 Feb 2020
        Try pdist2
D = pdist2([Lat(:) Lon(:)],[lat(:) lon(:)]);        % create every possible combinations of distances
[i,j] = find(D<=0.25);                              % find every distance satisfies condition
% i - station of (Lat,Lon)
% j - station of (lat,lon)
[i1,j1] = ind2sub(j,size(lat));                     % return to 2D matrix
Mes = M(i1,j1);                                     % stations that close enough
5 Comments
  darova
      
      
 on 16 Feb 2020
				Try without this line:
% [i1,j1] = ind2sub(j,size(lat));                     % return to 2D matrix
only
min(abs(Lat-lat(j(1)))+abs(Lon-lon(j(1))))
  darova
      
      
 on 16 Feb 2020
				Don't use ind2sub. It's not correct in this case
% [i1,j1] = ind2sub(j,size(lat));               % return to 2D matrix
Just one index
Mes = M(j);                                     % stations that close enough
More Answers (0)
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
