我有一个结构 P ,有20个矩阵。每个矩阵都是M=(P.S154 + P.S324 + P.S412 + ...)/20
双。矩阵的名称是相当随机的,例如S154,S324,S412等。有没有什么方法可以在这些矩阵中做平均而不必像这样输入?
belongsToMany
此外,使用这样的计算结构是否有意义。根据{{3}},也许它应该转换为单元格数组。
答案 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循环,您可以非常快速地进行计算!