what can I do to prevent overwriting in for loop?
Ältere Kommentare anzeigen
I have a data file recording a parameter every 1sec. I wrote a for loop to average each 60 rows to get 1 reading every 1min. what happened is that the code overwrite the results in the variable. help neede to correct the following code: for i=1:length(x) z=mean(x(i:i+59,:)) i=i+60 end variable z contain only one row. what can I do to prevent overwriting in for loop?
Antworten (2)
Iain
am 29 Aug. 2014
z(i) = mean(x(i:i+59,:));
4 Kommentare
Hikaru
am 29 Aug. 2014
@zeinab,
Your code defined different values for i. First, you said i = 1,2,3, to whatever length of x is. But in the loop, you defined i=i+60 (I'm assuming this is for the purpose of averaging the 60 rows), but at the next loop, MATLAB would use i=2.
r = 1:60:length(x)
for i=1:
z(i)=mean(x(r(i):r(i)+59,:))
end
Iain
am 29 Aug. 2014
z(i,:) = mean(x(i:i+59,:));
Michael Haderlein
am 29 Aug. 2014
for cnt=1:fix(length(x)/60)
z(cnt)=mean(x((cnt-1)*60+1:cnt*60));
end
But it's faster to not do it with a loop:
z=mean(reshape(x(1:fix(length(x)/60)*60),60,[]));
You shouldn't use i as variable as it's also the imaginary unit. And don't change the value of the increment in the loop, this won't have the desired effect.
2 Kommentare
zeinab
am 29 Aug. 2014
Michael Haderlein
am 29 Aug. 2014
cnt is a variable, "counter". Better name than i. reshape is a function which changes the shape of an array without changing the number of elements. E.g. change a 4x1 into a 2x2 array. fix is cutting everything after the decimal separator. In case the length of x is not exactly a multiple of 60, the program would crash if this fix thing isn't taken.
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!