找到一组结构的最大值

时间:2012-10-23 04:39:32

标签: arrays matlab data-structures

我一直在谷歌上搜索,但还没有成功。我想知道考虑所有字段的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{:}))

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

执行此操作,将为a(1).field1中的max_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

使用这些功能直到找到符合您需求的功能。

答案 1 :(得分:4)

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

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

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