Average across the fields of a structure when each field contains a single value

Hello,
I have a structure (Sway_dist_COP_Sag) with 3 fields, each containing a single value that I would like to average together. Please see image below. I would like the end result to be in the 2.15 range.
Thanks in advance.

 Accepted Answer

S = struct('arbitrary',1.9623,'field',2.584,'names',1.9125)
S = struct with fields:
arbitrary: 1.9623 field: 2.5840 names: 1.9125
C = struct2cell(S)
C = 3×1 cell array
{[1.9623]} {[2.5840]} {[1.9125]}
result = mean([C{:}])
result = 2.1529

2 Comments

Yes, this does seem to work for me. Interestingly though, when I try to combine your two lines of code into one...
result = mean([struct2cell(S){:}])
I get a "Invalid array indexing" error. Is there a reason I have to keep it 2 separate lines?
"Is there a reason I have to keep it 2 separate lines?"
Yes: in general MATLAB does not allow arbitrary trailing indexing.

Sign in to comment.

More Answers (1)

Try this
% Extract all values for each field into row vectors.
v1 = [Sway_dist_COP_Sag.Con1Pre00standop01]
v2 = [Sway_dist_COP_Sag.Con1Pre00standcl02]
v3 = [Sway_dist_COP_Sag.Con1Pre00stand05_1plate]
% Take the mean of all 3 row vectors strung together.
theMean = mean([v1, v2, v3])

4 Comments

As I use this in the future, the name of the structure will be the same, but the field names will be different. Is there a way to account for that?
You can use fieldnames and dynamic field names. Something like
fn = fieldnames(Sway_dist_COP_Sag);
for k = 1 : numel(fn)
thisFieldName = fn{k};
v1 = Sway_dist_COP_Sag.(thisFieldname)
end
Won't the for loop continously make v1 equal to whatever the current fieldname's value is?
Also, sorry to complicate things further, but I forgot to mention that I may in the future have more (or less) than three fields.
"Won't the for loop continously make v1 equal to whatever the current fieldname's value is?"
Yes.
Take a look at my answer and see if it'll work for your purposes.

Sign in to comment.

Categories

Asked:

on 13 Feb 2023

Commented:

on 13 Feb 2023

Community Treasure Hunt

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

Start Hunting!