【问题标题】:Average across matrices within a structures结构内矩阵的平均值
【发布时间】:2016-08-16 06:26:32
【问题描述】:

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

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

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

【问题讨论】:

标签: matlab matrix average cell-array


【解决方案1】:

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

因此,您需要:

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

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

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

使用 for 循环,您可以使您的计算变得非常快!

【讨论】:

    【解决方案2】:
    struct2cell(P)
    

    是一个元胞数组,每个元素都是您的结构字段之一(字段名称被丢弃)。那么

    cell2mat(struct2cell(P))
    

    是沿第一个轴连接这些矩阵的结果。您可能会合理地问它为什么这样做,而不是说,制作一个新轴并给您一个 4 维数组,但是期望对这些问题的合理答案是在自找挫折。无论如何,除非我把尺寸弄糊涂了,

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

    然后会给您大致的 4 维数组,其中“新”轴是(当然!)第 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])
    

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 2013-09-29
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多