结构内矩阵的平均值

时间:2016-04-22 14:48:11

标签: matlab matrix average cell-array

我有一个结构 P ,有20个矩阵。每个矩阵都是M=(P.S154 + P.S324 + P.S412 + ...)/20 双。矩阵的名称是相当随机的,例如S154,S324,S412等。有没有什么方法可以在这些矩阵中做平均而不必像这样输入?

belongsToMany

此外,使用这样的计算结构是否有意义。根据{{​​3}},也许它应该转换为单元格数组。

2 个答案:

答案 0 :(得分:1)

struct2cell(P)

是一个单元格数组,其每个元素都是您的结构字段之一(字段名称将被丢弃)。然后

cell2mat(struct2cell(P))

是沿第一轴连接这些矩阵的结果。你可能会合理地问为什么它会这样做,而不是说,制作一个新轴并给你一个4维数组,但期望这些问题的合理答案是要求沮丧。无论如何,除非我让尺寸变得混乱,

reshape(cell2mat(struct2cell(P)),[53 20 63 46])))

然后会给你大致的4维数组,然后使用" new"轴是(当然!)编号2.所以现在

mean(reshape(cell2mat(struct2cell(P)),[53 20 63 46]),2)

将计算该轴的平均值。结果将具有形状[53 1 63 46],因此现在您需要再次修复轴:

reshape(mean(reshape(cell2mat(struct2cell(P)),[53 20 63 46]),2),[53 63 46])

答案 1 :(得分:0)

如果您正在使用结构,并且您的问题,则每个矩阵都有字段名称。

因此,您需要:

1 - 使用函数fieldnames提取结构中的所有矩阵名称。 - http://www.mathworks.com/help/matlab/ref/fieldnames.html

2-然后您可以通过以下方式访问它:

names = fieldnames(P);
matrix1 = P.names{1}

使用for循环,您可以非常快速地进行计算!