我一直在谷歌上搜索,但还没有成功。我想知道考虑所有字段的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{:}))
我认为有一些超级有效的方法来做到这一点,我想念...有什么建议吗? 感谢
答案 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).field1
中max_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。然后,您可以在结构数组的循环中运行它。