使用 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 提供跨行的平均值,而不是向下的列。
我有以下格式的结构:
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 提供跨行的平均值,而不是向下的列。