多维数组元胞数组的 MATLAB 均值
MATLAB mean of cell array of multidimensional arrays
我有一个名为模板的元胞数组,其中模板是一个 1x29 元胞数组。模板的每个单元格都是一个 14x10x31 矩阵。矩阵的每个元素都是双精度的。
我想找到模板的平均 14x10x31 矩阵,即我想要一个 14x10x31 矩阵的结果,例如结果的元素 (1,1,1) 是元胞数组模板中 (1,1,1) 的所有 29 个值的平均值。
我不清楚该怎么做。
我查看了 cellfun
,以及 mean
命令的选项,即如何跨维度计算均值。例如,要计算所有三个维度的平均 m 将按如下方式完成...
m = cellfun(@(x) mean(mean(mean(x,1),2),3) , template, 'UniformOutput', false)
...这将给出 1x29 单元格数组,每个单元格包含一个值,即每个 14x10x31 数组中所有值的平均值,对于模板变量的每个单元格。
但显然这不是我想要的
为了实现我想要的效果,我需要将模板变量转换 (cell2mat
?) 为 29x14x10x31 的矩阵,然后在其第一个维度上 运行 mean
吗?我也看过 reshape
和 cat
但我不清楚如何将它们放在一起......或者这是否是实现我想要的最好方法?还是可以/应该使用 cellfun
?
要走的路是 cell2mat
,正如您在问题中已经指出的那样。但是简单地应用 cell2mat(A)
是行不通的。如 MATLAB 帮助中所述,cell2mat
保持基础形状,如下图所示:
(图片来自 Mathworks)
在我们的例子中,这将创建一个大小为 [14, 290, 31]
的矩阵,因为元胞数组 A
的大小为 [1, 29]
。如果我们简单地重塑元胞数组,使其位于第四维,即 [1, 1, 1, 29]
,那么 cell2mat
的输出将是 [14, 10, 31, 29]
,我们可以计算第四维的平均值:
B = cell2mat(reshape(A,[1,1,1,size(A,2)]));
M = mean(B,4);
我有一个名为模板的元胞数组,其中模板是一个 1x29 元胞数组。模板的每个单元格都是一个 14x10x31 矩阵。矩阵的每个元素都是双精度的。
我想找到模板的平均 14x10x31 矩阵,即我想要一个 14x10x31 矩阵的结果,例如结果的元素 (1,1,1) 是元胞数组模板中 (1,1,1) 的所有 29 个值的平均值。
我不清楚该怎么做。
我查看了 cellfun
,以及 mean
命令的选项,即如何跨维度计算均值。例如,要计算所有三个维度的平均 m 将按如下方式完成...
m = cellfun(@(x) mean(mean(mean(x,1),2),3) , template, 'UniformOutput', false)
...这将给出 1x29 单元格数组,每个单元格包含一个值,即每个 14x10x31 数组中所有值的平均值,对于模板变量的每个单元格。
但显然这不是我想要的
为了实现我想要的效果,我需要将模板变量转换 (cell2mat
?) 为 29x14x10x31 的矩阵,然后在其第一个维度上 运行 mean
吗?我也看过 reshape
和 cat
但我不清楚如何将它们放在一起......或者这是否是实现我想要的最好方法?还是可以/应该使用 cellfun
?
要走的路是 cell2mat
,正如您在问题中已经指出的那样。但是简单地应用 cell2mat(A)
是行不通的。如 MATLAB 帮助中所述,cell2mat
保持基础形状,如下图所示:
在我们的例子中,这将创建一个大小为 [14, 290, 31]
的矩阵,因为元胞数组 A
的大小为 [1, 29]
。如果我们简单地重塑元胞数组,使其位于第四维,即 [1, 1, 1, 29]
,那么 cell2mat
的输出将是 [14, 10, 31, 29]
,我们可以计算第四维的平均值:
B = cell2mat(reshape(A,[1,1,1,size(A,2)]));
M = mean(B,4);