matlab 向量化编程cellfun函数使用方法

cellfun 常用于向量化编程,比for循环要快


对元胞数组中的每个元胞应用函数

语法


A = cellfun(func,C)
A = cellfun(func,C1,…,Cn)
A = cellfun(___,Name,Value)
[A1,…,Am] = cellfun(___)

说明


A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。
您不能指定 cellfun 计算 A 的各元素的顺序,也不能指望它们按任何特定的顺序完成计算。


A = cellfun(func,C1,…,Cn) 将 func 应用于 C1,…,Cn 的各元胞的内容,因此 A(i) = func(C1{i},…,Cn{i})。函数 func 必须接受 n 个输入参数并返回一个标量。元胞数组 C1,…,Cn 的大小必须全部相同。


A = cellfun(___,Name,Value) 应用 func 并使用一个或多个 Name,Value 对组参数指定其他选项。例如,要以元胞数组形式返回输出值,请指定 ‘UniformOutput’,false。当 func 返回的值不能串联成数组时,可以按元胞数组的形式返回 A。您可以将 Name,Value 对组参数与上述任何语法中的输入参数结合使用。


当 func 返回 m 个输出值时,[A1,…,Am] = cellfun(___) 返回多个输出数组 A1,…,Am。func 可以返回不同数据类型的输出参数,但每次调用 func 时返回的每个输出的数据类型必须相同。您可以将此语法与前面语法中的任何输入参数结合使用。
从 func 返回的输出参数的数量不必与 C1,…,Cn 指定的输入参数的数量相同。


示例1 单个元胞输入

C = {1:10, [2; 4; 6], []};
A = cellfun(@mean,C)  % 对元胞中每一个元素求均值

A = 1×3

    5.5000    4.0000       NaN

示例2 多个元胞输入

X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)}
figure
hold on
p = cellfun(@plot,X,Y);
p(1).Marker = 'o';
p(2).Marker = '+';
p(3).Marker = 's';
hold off

在这里插入图片描述
示例3 多个数组输出

C = {1:10, [2; 4; 6], []}
[nrows,ncols] = cellfun(@size,C)

C = 1x3 cell array
    {1x10 double}    {3x1 double}    {0x0 double}
    
nrows = 1×3

     1     3     0

ncols = 1×3

    10     1     0

示例4 UniformOutput参数
A = cellfun(@mean,C,‘UniformOutput’,false) 以元胞数组的形式返回 mean 的输出。

>> C = {1:10, [2; 4; 6], []};
>> A = cellfun(@mean,C,'UniformOutput',false) 

A =

  1×3 cell 数组

    {[5.5000]}    {[4]}    {[NaN]}

>>A = cellfun(@mean,C,'UniformOutput',true) 

A =

    5.5000    4.0000       NaN

更多向量化编程函数参见 arrayfun structfun bsxfun

发布了50 篇原创文章 · 获赞 66 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43157190/article/details/99706603
今日推荐