MATLAB意味着多维数组的单元阵列

时间:2015-08-07 14:41:21

标签: matlab multidimensional-array mean cell-array

我有一个名为template的单元格数组,其中template是1x29单元格数组。模板的每个单元格是14x10x31矩阵。矩阵的每个元素都是双精度。

我想找到模板的平均14x10x31矩阵,即我想要一个14x10x31矩阵的结果,例如结果的元素(1,1,1)是单元格数组模板中所有29个值(1,1,1)的平均值。

我不清楚如何解决这个问题。

我查看了cellfun以及mean命令的选项,即如何跨维度计算平均值。例如,计算所有三个维度的平均值m将按如下方式进行...

m = cellfun(@(x) mean(mean(mean(x,1),2),3) , template, 'UniformOutput', false)

...这将给出1x29单元阵列,每个单元格包含一个单独的值,即对每个14x10x31数组中的所有值进行平均,对于模板变量的每个单元格。

但显然这不是我想要的。

要实现我想要的功能,我需要将模板变量(cell2mat?)转换为29x14x10x31的矩阵,然后在第一维上运行mean?我也看了reshapecat但是我不清楚如何将它们放在一起但是......或者如果这是实现我想要的最佳方式?或者可以/应该使用cellfun

来完成

1 个答案:

答案 0 :(得分:3)

你要走的路是cell2mat,正如你在问题中所说的那样。但是简单地应用cell2mat(A)将无效。如MATLAB帮助中所述,cell2mat保留基础形状,如下图所示:

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);