Info

change nested for to vectorise

1 view (last 30 days)
Mani Ahmadian on 22 Oct 2014
Closed: MATLAB Answer Bot on 20 Aug 2021
Hi
I have a 100*100 grid as below:
xgrid=1:100;
ygrid=1:100;
I have 5 data points in this grid(x,y) as below,too:
X=[10 20 30 40 50];
Y=[55 65 75 85 95];
to compute distances of each node from these data points,I use a nested for structure as:
deltaX=zeros(100,100,length(X));
deltaY=zeros(100,100,length(X));
for ii=1:length(X)
for jj=1:100
for kk=1:100
deltaX(jj,kk,ii)=X(ii)-xgrid(kk);
deltaY(jj,kk,ii)=Y(ii)-ygrid(kk);
end
end
end
deltaY=permute(deltaY,[2 1 3]);
distance1=hypot(deltaX,deltaY);
distancegrid=zeros(100,100,length(X));
distancegrid=squeeze(distance1);
I want to remove this nested for structure and vectorise my code. How it's possible to do?
Thanks a lot
Mani

David Sanchez on 22 Oct 2014
xgrid=1:100;
ygrid=1:100;
X=[10 20 30 40 50];
Y=[55 65 75 85 95];
% to start with, there is no need of a 3D matrix.
% you result is the same along your jj dimension
deltaX=zeros(100,length(X));
deltaY=zeros(100,length(X));
% and you can vectorize like this
for ii=1:length(X)
deltaX(:,ii)=X(ii)-xgrid;
deltaY(:,ii)=Y(ii)-ygrid;
end
Mani Ahmadian on 22 Oct 2014
Dear David
Thanks for your answer. But I'm trying to find a way to do all computations without for structure, I have limitations because my data base is very large and it's so time consuming. Do you/someone have an approach to do the job without for structure?
Mani

Mani Ahmadian on 22 Oct 2014
Hi everybody.