How to vectorise or speedup the code

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

采纳的回答

darova
darova 2020-2-16
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 个评论
darova
darova 2020-2-16
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
darova 2020-2-16
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

请先登录,再进行评论。

更多回答(0 个)

标签

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by