在Matlab中总结特定字段

时间:2013-10-18 23:27:17

标签: matlab structure

如何汇总不同的字段?我想总结材料的所有信息(1)...所以我想添加5 + 4 + 6 + 300,但我不确定如何。除了做材料之外还有另外一种方法(1)。可能+材料(1)。等等......

 material(1).May= 5;
 material(1).June=4;
 material(1).July=6;
 material(1).price=300;
 material(2).May=10;
 material(2).price=550;
 material(3).May=90;

2 个答案:

答案 0 :(得分:4)

您可以使用structfun

result = sum(    structfun(@(x)x, material(1))    );

内部部分(structfun(@(x)x, material(1)))在结构中的每个单独字段中运行一个函数,并以数组形式返回结果。通过使用标识函数(@(x)x),我们只获取值。 sum当然是显而易见的事情。

稍微长一点的方法是访问循环中的每个字段。例如:

fNames = fieldnames(material(1));
accumulatedValue = 0;
for ix = 1:length(fNames)
    accumulatedValue = accumulatedValue + material(1).(fNames{ix});
end
result = accumulatedValue

对于某些用户来说,这将更容易阅读,但对于专家用户,第一个将更容易阅读。结果和(近似)表现相同。

答案 1 :(得分:0)

我认为Pursuit的回答非常好,但这里有一个替代方案:

sum( cell2mat( struct2cell( material(1) )));