在 MATLAB 中平均 4D 矩阵中某些维度的子集
Averaging subsets of certain dimensions in a 4D matrix in MATLAB
我的问题源于难以概念化 4D 矩阵(相对于 3D)。
在 MATLAB 中,我将数据存储在 5x5x7x54 矩阵中。 5x5 部分在对角线上对称,表示 5 个大脑区域之间 activity 的相关性。 '7'代表7个时间点,'54'代表54个受试者,每组17个,分为3组(前17个为Group1,接下来17个为Group2,最后17个为Group3)。
我想对每组参与者的每个相关值进行平均,但我想对每个时间点分别进行此操作。因此,例如,我想要时间点 1 的前 17 个受试者的平均相关值,然后是时间点 2 的平均相关值,等等。然后我想要时间点 1 的中间 17 个受试者的平均相关值,等等。
总而言之,我将为每个组准备 7 个 5x5 矩阵(因此总共有 21 个 5x5 矩阵)。
我对 MATLAB 完全一窍不通,所以我最初考虑解决这个问题的方法是考虑将矩阵分解成循环,但我知道这既混乱又效率低下。但是,否则,我会非常迷茫,因为我很难将矩阵本身概念化。
谁能提出行动计划?
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)
。
我的问题源于难以概念化 4D 矩阵(相对于 3D)。 在 MATLAB 中,我将数据存储在 5x5x7x54 矩阵中。 5x5 部分在对角线上对称,表示 5 个大脑区域之间 activity 的相关性。 '7'代表7个时间点,'54'代表54个受试者,每组17个,分为3组(前17个为Group1,接下来17个为Group2,最后17个为Group3)。
我想对每组参与者的每个相关值进行平均,但我想对每个时间点分别进行此操作。因此,例如,我想要时间点 1 的前 17 个受试者的平均相关值,然后是时间点 2 的平均相关值,等等。然后我想要时间点 1 的中间 17 个受试者的平均相关值,等等。
总而言之,我将为每个组准备 7 个 5x5 矩阵(因此总共有 21 个 5x5 矩阵)。
我对 MATLAB 完全一窍不通,所以我最初考虑解决这个问题的方法是考虑将矩阵分解成循环,但我知道这既混乱又效率低下。但是,否则,我会非常迷茫,因为我很难将矩阵本身概念化。
谁能提出行动计划?
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)
。