Borrar filtros
Borrar filtros

what can I do to prevent overwriting in for loop?

7 visualizaciones (últimos 30 días)
zeinab
zeinab el 29 de Ag. de 2014
Comentada: Michael Haderlein el 29 de Ag. de 2014
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?

Respuestas (2)

Iain
Iain el 29 de Ag. de 2014
z(i) = mean(x(i:i+59,:));
  4 comentarios
Iain
Iain el 29 de Ag. de 2014
z(i,:) = mean(x(i:i+59,:));
zeinab
zeinab el 29 de Ag. de 2014
Editada: zeinab el 29 de Ag. de 2014
@HIKARU, thanks for reply, and i will try this way. @lain, the loop doesn't stop :)

Iniciar sesión para comentar.


Michael Haderlein
Michael Haderlein el 29 de Ag. de 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 comentarios
zeinab
zeinab el 29 de Ag. de 2014
thnks for reply but what are cnt,reshape,and fix?
Michael Haderlein
Michael Haderlein el 29 de Ag. de 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.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by