结构内跨矩阵的平均值

Average across matrices within a structures

我有一个包含 20 个矩阵的结构 P。每个矩阵都是 53x63x46 double。矩阵的名称是相当随机的,例如 S154、S324、S412 等。有什么方法可以对这些矩阵进行平均而不必像这样输入?

M=(P.S154 + P.S324 + P.S412 + ...)/20

另外,像这样使用结构进行计算是否有意义。根据this post,或许应该转为元胞数组。

如果您使用的是结构,根据您的问题,每个矩阵都有字段名。

因此,您需要:

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

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

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

然后使用 for 循环可以使您的计算非常快!

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])