Info

This question is closed. Reopen it to edit or answer.

change nested for to vectorise

1 view (last 30 days)
Mani Ahmadian
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

Answers (2)

David Sanchez
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
  1 Comment
Mani Ahmadian
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
Mani Ahmadian on 22 Oct 2014
Hi everybody.
would you please help me to improve my code?
Thanks a lot.
Mani

Tags

Community Treasure Hunt

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

Start Hunting!