2

我一直在谷歌搜索和搜索,但还没有成功。我想知道考虑所有字段a{1}的最大值。a{2}同样,我想知道每个 a 的平均值,同时考虑所有字段。

a{1}.field1=[1:5];
a{2}.field1=[1:6];
a{1}.field2=[2:8];
a{2}.field2=[2:9];

我希望循环中的以下内容会起作用:

fn=fieldnames(a{1});
max(a{1}.(fn{:}))
mean(a{1}.(fn{:}))

我认为有一些我想念的超级有效的方法来做到这一点......有什么建议吗?谢谢

4

2 回答 2

4

首先,我认为您的意思是定义一个多维结构:

a(1).field1=[1:5];
a(2).field1=[1:6];
a(1).field2=[2:8];
a(2).field2=[2:9];

(注意圆括号而不是花括号。花括号会给你一个包含两个structs 的单元格数组)。现在,您寻求的价值观:

max_mean = cellfun(@(x)[max(x) mean(x)], {a.field1}, 'UniformOutput', false);

这样做,将为您提供a(1).field1in的最大值和平均值,以及inmax_mean{1}的最大值和平均值。a(2).field1max_mean{2}

对所有字段执行此操作可以通过将cellfun上述嵌套在另一个中来完成cellfun

max_means = cellfun(@(x) ...
    cellfun(@(y)[max(y) mean(y)], {a.(x)}, 'UniformOutput', false), ...
    fieldnames(a), 'UniformOutput', false);

以便

max_means{1}{1} % will give you the max's and means of a(1).field1
max_means{1}{2} % will give you the max's and means of a(2).field1
max_means{2}{1} % will give you the max's and means of a(1).field2
max_means{2}{2} % will give you the max's and means of a(2).field2

使用这些功能,直到找到适合您需求的东西。

于 2012-10-23T05:00:37.150 回答
4

假设结构中的每个字段都与 max/mean 函数兼容,您可以使用:

maxima(ii) = max(structfun(@max, a{ii}))
means(ii) = mean(structfun(@mean, a{ii}))

Structfun 返回列向量中每个字段的最大值/平均值。可以很容易地再次应用 max 和 mean 函数来找到总的 max/mean。然后,您可以在一个循环中为结构数组运行它。

于 2012-10-24T00:34:29.287 回答