MATLAB Answers

Mean of a field of a struct

2 ビュー (過去 30 日間)
FG
FG 2020 年 9 月 13 日
コメント済み: Ameer Hamza 2020 年 9 月 15 日
As seen in image below, I have a struct of 5 fields. I need to compute the avarege of the HV3, HV5, HV7 and thd in 1st row, then in the second row and so on seperately.. Have a nice weekend..

  0 件のコメント

サインインしてコメントする。

回答 (2 件)

Matt J
Matt J 2020 年 9 月 13 日
C=struct2cell(rmfield(S,'name'));
A=cell2mat(reshape(C,1,4,[]));
Averages = reshape( mean(A,1),4,[]).'

  3 件のコメント

FG
FG 2020 年 9 月 13 日
I cant remove names because parameters are shown on the names..
Matt J
Matt J 2020 年 9 月 13 日
[array2table({S.name}.'),array2table(Averages)]
FG
FG 2020 年 9 月 14 日
Thanks Matt..

サインインしてコメントする。


Ameer Hamza
Ameer Hamza 2020 年 9 月 13 日
Try something like this
S_new = rmfield(S, 'name');
S_out = arrayfun(@(s) structfun(@mean, s, 'uni', 0), S_new);
[S_out.name] = S.name;

  8 件のコメント

表示 5 件の古いコメント
Ameer Hamza
Ameer Hamza 2020 年 9 月 15 日
k here denotes the dimension along which to average. This is not the correct option to use for your case. To average a specific number of elements, try something like this
Ave3 = zeros(size(S));
Ave5 = zeros(size(S));
Ave7 = zeros(size(S));
Avethd = zeros(size(S));
for i=1:length(S)
M3=([S(i).HV3]);
M5=([S(i).HV5]);
M7=([S(i).HV7]);
Mthd = ([S(i).thd]);
Ave3(i)=mean(M3(1660:9870)) ;
Ave5(i)=mean(M5(1660:9870));
Ave7(i)=mean(M7(1660:9870));
Avethd(i)=mean(Mthd(1660:9870));
end
This code also store average values for all the iterations.
FG
FG 2020 年 9 月 15 日
Thank you Ameer.. I just need to write it to excel, job's done !
Ameer Hamza
Ameer Hamza 2020 年 9 月 15 日
I am glad to be of help!

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by