使用 structfun,Matlab 的结构中字段的平均值

Mean of fields in a structure using structfun, Matlab

我有以下格式的结构:

A.L1.data = <1000x3 double>
A.L2.data = <1000x3 double>
A.L3.data = <1000x3 double>

我想获取所有字段第一列的平均值,即一个 1000 行的向量,即 L1、L2 和 L3 的平均值。

我试过将 structfun 与以下代码一起使用:

foo = structfun(@(x) mean(x.data(:,1)), A, 'UniformOutput', false)

但是,这给了我每个第一列的平均值(单个值),而不是所有字段的平均值。

如果我这样做:

 foo = structfun(@(x) mean(x.data), A, 'UniformOutput', false)

我获取每个字段的每列的平均值。

我应该如何修改我的代码?

您可以通过struct2array访问结构的所有数据。

获取结构 firstColumnsOfData 字段 L1 L2 L3 的第一列为 data:

firstColumnsOfData = structfun(@(x) x.data(:,1), A, 'UniformOutput', false)

获取 L1 L2 L3:

每个元素的平均值
mL123 =  mean(struct2array(firstColumnsOfData')) % transpose to not get mean of each field

我理解你的问题的意思是你想要 A.L1.data(ii,1)A.L2.data(ii,1)A.L3.data(ii,1) 的平均值,从而创建一个包含 1000 个条目的列向量。使用 structfun,我看不出如何跨结构中的字段应用它,因为这会按顺序应用提供给结构中每个字段的函数。

我想你想要的是这个:

bar = mean([A.L1.data(:,1) A.L2.data(:,1) A.L3.data(:,1)], 2);

2 作为第二个参数传递给 mean 提供跨行的平均值,而不是向下的列。