我有一个有20个矩阵的结构P。每个矩阵都是53x63x46双的。矩阵的名称是相当随机的,例如S154、S324、S412等。我是否可以在这些矩阵之间做一个平均值,而不必像这样键入?
M=(P.S154 + P.S324 + P.S412 + ...)/20同样,使用这样的计算结构有意义吗?根据this post的说法,也许应该将其转换为单元格数组。
发布于 2016-04-22 15:03:16
struct2cell(P)是一个单元格数组,每个元素都是您的结构字段之一(字段名被丢弃)。然后
cell2mat(struct2cell(P))是沿着第一轴连接这些矩阵的结果。你可能会合理地问,为什么它这样做,而不是,比如说,建立一个新的轴,给你一个四维的数组,但期待这样的问题的合理答案是询问挫折。总之,除非我把尺寸弄糊涂了,
reshape(cell2mat(struct2cell(P)),[53 20 63 46])))然后会给你大致的四维数组,你所追求的,与“新的”轴是(当然!)第二,所以现在
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])发布于 2016-04-22 14:56:01
如果您正在使用结构,并通过您的问题,您有每个矩阵的字段名。
因此,你需要:
1-使用函数fieldnames提取结构中的所有矩阵名。- http://www.mathworks.com/help/matlab/ref/fieldnames.html
2-然后您可以通过这样的方式访问它:
names = fieldnames(P);
matrix1 = P.names{1}使用for循环,您就可以非常快地进行计算!
https://stackoverflow.com/questions/36796938
复制相似问题