Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

change nested for to vectorise

1 Ansicht (letzte 30 Tage)
Mani Ahmadian
Mani Ahmadian am 22 Okt. 2014
Geschlossen: MATLAB Answer Bot am 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

Antworten (2)

David Sanchez
David Sanchez am 22 Okt. 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 Kommentar
Mani Ahmadian
Mani Ahmadian am 22 Okt. 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 am 22 Okt. 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!

Translated by