我对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)
谢谢!
cellfun就像循环单元矩阵并
在每个单元上分别执行指定的函数一样。
它通常比在循环中显式执行相同的操作要快
,但基本区别在于它易于
编写和读取 - 它立即清楚调用正在
做什么。但您也可以自己编写循环。
根据您的具体情况,您可以使用cellfun这种方式:
mean_a = mean(cellfun(@(x) mean(x(:)), a));
Run Code Online (Sandbox Code Playgroud)
如果您有数千个单元格,并且您想对每个单元格执行某些操作,则
可以使用循环或顺便说cellfun
一句:@(x)意味着您希望将每个单元格的内容
理解为x这样,以便mean(x(:))为您提供
所需的内容 - 整体的平均值细胞的基质含量。