how to write this without loop

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

0 Stimmen

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

0 Stimmen

You can start with diff(r), and then use logical indexing.

Kategorien

Mehr zu Read, Write, and Modify Image finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 1 Mär. 2013

Community Treasure Hunt

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

Start Hunting!

Translated by