在MATLAB中对4D矩阵中某些维度的子集进行平均

时间:2015-07-31 00:26:50

标签: matlab matrix 4d

我的问题源于难以概念化4D矩阵(而不是3D)。 在MATLAB中,我将数据存储在5x5x7x54矩阵中。 5x5部分在对角线上是对称的,表示5个脑区域之间活动的相关性。 '7'代表7个时间点,'54'代表54个主题,其中3个组各有17个(前17个是Group1,接下来17个是Group2,后17个是Group3)。

我想平均每个组中参与者的每个相关值,但我想为每个时间点单独执行此操作。因此,例如,我想要时间点1的前17个主题的平均相关值,然后是时间点2,等等。然后我想要时间点1等中间17个主题的平均相关值。

总之,我会为每个组分配7个5x5矩阵(总共21个5x5矩阵)。

我是MATLAB的绝对废话,所以我最初考虑解决这个问题的方法是考虑将循环中的矩阵分开,但我知道这将是混乱和低效的。否则,我失去了,因为我很难概念化矩阵本身。

有人可以提出行动计划吗?

1 个答案:

答案 0 :(得分:0)

Ben Voigt的观点很明确,但人们可以做得更好。由于您要计算每组主题的平均值,因此我们将主题和组维度分开:

A = reshape(A, [5 5 7 17 3]);

现在你有了一个五维数组,其中最后两个维度是“subject”和“group”。让我们对主题进行平均分析:

m = mean(A, 4);

结果是一个尺寸为5 x 5 x 7 x 1 x 3的数组。平均后,第四个维度为singleton。我们可以摆脱这个:

m = squeeze(m);

之后,时间点t和组g的平均相关矩阵为m(:, :, t, g)