我何时以及为什么应该在 Matlab 中使用 cellfun?

Ste*_*fin 5 matlab cell

我对cellfunMATLAB 中的函数有疑问。

我什么时候/为什么要使用它,什么时候我也可以放弃它?

一个简单的例子:假设我有一个 cell a,我想找到 中所有值的平均值a

a{1} = [1 2;3 4];
a{2} = [1 2 3;4 5 6; 7 8 9];
Run Code Online (Sandbox Code Playgroud)

我的方法是这样的:

mean([a{1}(:); a{2}(:)])
Run Code Online (Sandbox Code Playgroud)

什么是合适的cellfun版本,它会更好吗?

我试过做这样的事情,(显然不起作用):

mean_a = mean(cellfun(@mean, a,'UniformOutput',0))
Run Code Online (Sandbox Code Playgroud)

谢谢!

mma*_*ski 4

cellfun就像循环单元矩阵并
在每个单元上分别执行指定的函数一样。
它通常比在循环中显式执行相同的操作要快
,但基本区别在于它易于
编写和读取 - 它立即清楚调用正在
做什么。但您也可以自己编写循环。

根据您的具体情况,您可以使用cellfun这种方式:

mean_a = mean(cellfun(@(x) mean(x(:)), a));
Run Code Online (Sandbox Code Playgroud)

如果您有数千个单元格,并且您想对每个单元格执行某些操作,则
可以使用循环或顺便说cellfun
一句:@(x)意味着您希望将每个单元格的内容
理解为x这样,以便mean(x(:))为您提供
所需的内容 - 整体的平均值细胞的基质含量。