how to write this without loop

1 Ansicht (letzte 30 Tage)
Rica
Rica am 1 Mär. 2013
hi! i wrote this in matlab:
%
r is a mtrix of the size(25*30000)
for l=1:30000
for k=2:25
d(k,l)=r(k,l)-r(k-1,l);
if d(k,l)<-109
r(k,l)=r(k,l)+300;
elseif d(k,l)>180
r(k,l)=r(k,l)-300;
end
end
end
how could write this with minimal loops?
thank you

Akzeptierte Antwort

Jan
Jan am 1 Mär. 2013
Bearbeitet: Jan am 1 Mär. 2013
d = [zeros(1, 30000); diff(r)];
index = (d < -109);
r(index) = r(index) + 300;
index = (d > 180);
r(index) = r(index) - 300;
Or:
d = [zeros(1, 30000); diff(r)];
shift = zeros(size(r));
shift(d < -109) = 300;
shift(d > 180) = -300;
r = r + shift;
  2 Kommentare
Rica
Rica am 1 Mär. 2013
this is really professional :-). how to get this level?
thanks
Rica
Rica am 1 Mär. 2013
there is a proble with usin diff.in may loop i use the actual value to make the difference
%
d(k,l)=r(k,l)-r(k-1,l);
with the actual value of *d* means the corrected value with the if statement:
%
if d(k,l)<-109
r(k,l)=r(k,l)+300;
elseif d(k,l)>180
r(k,l)=r(k,l)-300;
thank you

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 1 Mär. 2013
You can start with diff(r), and then use logical indexing.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by