我有以下格式的结构:
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)
我获得每个字段的每列的平均值。
我应该如何修改我的代码?
答案 0 :(得分:1)
您可以通过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
答案 1 :(得分:1)
我理解您的问题意味着您需要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意味着提供行的平均值而不是列。