How do I take an average of fields in a structure?
Ältere Kommentare anzeigen
I have 3 fields in a structure that I want to take the average and standard deviation of. What is the simplest way to do this?

1 Kommentar
Espen Mikkelsen
am 24 Mär. 2018
could you give one example of your data?
Akzeptierte Antwort
Weitere Antworten (2)
Walter Roberson
am 24 Mär. 2018
means = structfun(@mean, BindingDataToSave, 'uniform', 0);
stds = structfun(@std, BindingDataToSave, 'uniform', 0);
George Abrahams
am 30 Dez. 2022
An improvement over Walter's answer would be to use my fieldfun function on File Exchange / GitHub, which outputs a structure with the same fields as the input structure(s). That means that you can index the means and standard deviations without knowing the order of the fields (effectively columns in your attached image).
rng(1,'twister')
BindingDataToSave = struct( 'TotalVirusesBound', num2cell(rand(26,1)), ...
'NumberGoodViruses', num2cell(rand(26,1)), 'NumberBadViruses', ...
num2cell(rand(26,1)) );
fieldfun( @(varargin) mean([varargin{:}]), BindingDataToSave )
% ans = struct with fields:
% TotalVirusesBound: 0.4574
% NumberGoodViruses: 0.4675
% NumberBadViruses: 0.4530
Although, you should probably also consider using a table and not a structure.
BindingDataToSave = struct2table( BindingDataToSave );
mean( BindingDataToSave.TotalVirusesBound )
% ans = 0.4574
varfun(@mean,BindingDataToSave)
% ans = 1×3 table
% mean_TotalVirusesBound mean_NumberGoodViruses mean_NumberBadViruses
% 0.45736 0.46752 0.45302
Kategorien
Mehr zu Structures 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!