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

时间:2015-10-22 13:22:26

标签: matlab vector data-structures 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)

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

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

2 个答案:

答案 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意味着提供行的平均值而不是列。