what can I do to prevent overwriting in for loop?
2 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
回答(2 个)
Michael Haderlein
2014-8-29
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 个评论
Michael Haderlein
2014-8-29
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!