cell数组是保存各种类型和大小信息的有用方法(结构也是如此)。当需要对cell数组中的所有值或值的子集执行操作或计算时,可以使用的一个有用函数是cellfun。与structfun或arrayfun等其他函数类似,cellfun允许将预定义或用户定义的函数应用于数组中的每个元素。
举个例子,找到cell里面不为空的数组
cellfun基本语法
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 具有相同的大小。
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。
cellfun其他一些可以执行的内置函数包括:
“isreal”、“islogical”、“ndims”、“prodofsize”、“sclass”
与字符串数组一起,cellfun可以允许更简单的数组操作,而无需使用循环。以以下单元格数组为例:
如果我们想转置每个单独的数组,我们可以结合使用转置函数和cellfun函数。
默认情况下,“UniformOutput”设置为true,但在这种情况下,我们希望将其设置为false,以便将结果输出到另一个单元格数组中。如果每个数组的输出都是标量,我们可以将“UniformOutput”保留为true。例如,请根据“UniformOutput”的不同值,查看以下对每个数组运行求和的结果。
将num2cell与cellfun相结合可以实现进一步的矩阵计算。
例如,可以对以下阵列的每一列执行矩阵乘法:
当然我们也可以自己创建了以下函数,以确定数组的总和、平均值和最小值: