How to find average and standard deviation in a for loop?

24 visualizaciones (últimos 30 días)
Anu
Anu el 25 de Feb. de 2022
Comentada: Arif Hoq el 25 de Feb. de 2022
I have a mat file with 70 rows and 11 columns (see the attached). I want to find the mean and standard deviation row-wise with an averaging window of 5. I expected my outcome's dimension as 14x11. As an output, I want to export it as an excel file, where the mean values are 14x11, and the standard deviation is placed next to the mean. I also wanted to add a row in the first row as x, where my x = 0:10:100. For your reference, I have attached the output file. I have written the following code. However, I get it as 14x1, and I understand that the mean is done for 5 rows and 11 columns, but I could not figure it out to fix the issue. May I request you to help me?
avaregedwindow = 5;
[m,n] = size(data_sweep);
k = floor(m/avaregedwindow);
for i = 1: k
p = avaregedwindow*i -(avaregedwindow-1);
y = data_sweep(p:p+(avaregedwindow-1));
mean_y(i, :)= mean(y); %the mistake is here, I guess
sd_y(i, :) = std(y);
end
x = 0:10:100;
meanvalues = vertcat(x, mean_y); % gives error as the dimension does not match
stdvalues = vertcat(x, sd_y); % gives error as the dimension does not match
merge = [mean values, stdvalues];
filename = 'output.xlsx';
writetable(filename, 'merge')

Respuesta aceptada

Arif Hoq
Arif Hoq el 25 de Feb. de 2022
Editada: Arif Hoq el 25 de Feb. de 2022
you can store your data in a cell array. just export the date in excel using range. and you are indexing upto k=14. but you have k*col =154 data.
A=load('matlab1.mat');
data_sweep=A.data_sweep;
avgwin = 5;
[row col]=size(data_sweep);
N = size(data_sweep,1);
k = floor(N/avgwin);
C=cell(floor(N/avgwin),size(data_sweep,2));
C1=cell(floor(N/avgwin),size(data_sweep,2));
for i = 1: k*col
p = avgwin*i -(avgwin-1);
y= data_sweep(p:p+(avgwin-1));
C{i}= mean(y); %the mistake is here, I guess
C1{i} = std(y);
end
matrix=[C{:}];
mean_y=reshape(matrix,14,11);
matrix1=[C1{:}];
sd_y=reshape(matrix1,14,11);
x = (0:10:100);
Mean_Data=[x;mean_y];
Sd_Data=[x;sd_y];
writematrix(Mean_Data,'M.xls','Sheet',1,'Range','A1:K20')
writematrix(Sd_Data,'M.xls','Sheet',1,'Range','M1:W20')
  3 comentarios
Anu
Anu el 25 de Feb. de 2022
Thanks so much, @Arif Hoq! The reshape one looks more simple. Thanks for your suggestion.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by