我有一个名为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
?我也看了reshape
和cat
但是我不清楚如何将它们放在一起但是......或者如果这是实现我想要的最佳方式?或者可以/应该使用cellfun
?
答案 0 :(得分:3)
你要走的路是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);