添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大气的芒果  ·  Android Studio 开发之 ...·  1 年前    · 

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 指定的输入参数的数量相同。

示例

全部折叠

创建一个元胞数组,其中包含不同大小的数值数组。

C = {1:10, [2; 4; 6], []}
C=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {3x1 double}    {0x0 double}

计算每个数值数组的均值,然后以数组的形式返回这些均值。

A = cellfun(@mean,C)
A = 1×3
    5.5000    4.0000       NaN

创建两个元胞数组,其中包含不同大小的数值数组。

X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)};

绘制数组。从 plot 函数返回图形线条对象数组,并使用这些对象为每一组数据点添加不同的标记。 cellfun 可以返回任何数据类型的数组,只要该数据类型的对象可以串联即可。

figure
hold on
p = cellfun(@plot,X,Y);
p(1).Marker = 'o';
p(2).Marker = '+';
p(3).Marker = 's';
hold off

Figure contains an axes object. The axes object contains 3 objects of type line.

创建一个元胞数组,其中包含不同大小的数值数组。

C = {1:10, [2; 4; 6], []}
C=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {3x1 double}    {0x0 double}

计算 C 中每个数组的大小。行数和列数分别输出在两个 1×3 数值数组中。

[nrows,ncols] = cellfun(@size,C)
nrows = 1×3
     1     3     0
ncols = 1×3
    10     1     0

您可以使用 cellfun 将函数应用于字符向量元胞数组和字符串数组。 cellfun 以相同的方式处理这两种数组。

创建一个字符向量元胞数组,其中包含一周各个工作日的名称。

C = {'Monday','Tuesday','Wednesday','Thursday','Friday'}
C = 1x5 cell
    {'Monday'}    {'Tuesday'}    {'Wednesday'}    {'Thursday'}    {'Friday'}

使用 cellfun 函数为这些名称创建三个字母的缩写。指定一个函数,以提取前三个字符并将它们以字符向量的形式返回。要以元胞数组的形式返回这些缩写,请指定 'UniformOutput',false 名称-值对组。

A = cellfun(@(x) x(1:3),C,'UniformOutput',false)
A = 1x5 cell
    {'Mon'}    {'Tue'}    {'Wed'}    {'Thu'}    {'Fri'}

您还可以对字符串数组调用 cellfun 。为了实现兼容性, cellfun 将字符串数组的每个元素视为一个字符向量。如果您指定返回文本的函数, cellfun 将以字符向量元胞数组而不是字符串数组的形式返回文本。

使用 cellfun 为字符串数组中的名称创建缩写。

str = ["Saturday","Sunday"]
str = 1x2 string
    "Saturday"    "Sunday"
B = cellfun(@(x) x(1:3),str,'UniformOutput',false)
B = 1x2 cell
    {'Sat'}    {'Sun'}

输入参数

全部折叠

要应用于输入元胞数组的元胞内容的函数,指定为函数句柄、字符向量或字符串标量。

func 可以对应于多个函数文件,因此可以表示一组重载函数。在这些情况下,MATLAB ® 将基于输入参数的类来确定调用哪个函数。

向后兼容性

您可以将 func 指定为字符向量或字符串标量,而不是函数句柄,但仅适用于一组有限的函数名称。 func 可以是: 'isempty' 'islogical' 'isreal' 'length' 'ndims' 'prodofsize' 'size' 'isclass'

如果您指定函数名称而不是函数句柄:

  • cellfun 不会调用任何重载版本的函数。

  • size isclass 函数需要 cellfun 函数的其他输入:

    A = cellfun('size',C,k) 返回沿 C 每个元素的第 k 维的大小。

    对于与 classname 参数匹配的 C 的每个元素, A = cellfun('isclass',C,classname) 返回逻辑值 1 ( true )。对于作为 classname 子类的对象,该语法返回逻辑 0 ( false )。

示例: A = cellfun(@mean,C) 返回 C 中各元素的均值。

输入数组,指定为元胞数组或字符串数组。如果 C 是字符串数组,则 cellfun C 的每个元素视为一个字符向量,而不是一个字符串。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN ,其中 Name 是参数名称, Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: A = cellfun(@mean,C,'UniformOutput',false) 以元胞数组的形式返回 mean 的输出。如果 C 包含数值矩阵,并且 mean 返回向量,请使用 'UniformOutput',false 名称-值对组。

True 或 false,指定为以逗号分隔的对组,其中包含 'UniformOutput' true ( 1 ) 或 false ( 0 )。

'UniformOutput' 的值

描述

true ( 1 )

func 必须返回标量,由 cellfun 串联成数组。

false ( 0 )

cellfun 以元胞数组的形式返回 func 的输出。 func 的输出可以具有任意大小和不同的数据类型。

用于捕获错误的函数,指定为以逗号分隔的对组,其中包含 'ErrorHandler' 和一个函数句柄。如果 func 引发错误, 'ErrorHandler' 指定的错误处理程序将捕获该错误,并执行该函数中指定的操作。错误处理程序必须以两种方式处理错误:或者引发错误,或者返回与 func 同样数量的输出。如果 'UniformOutput' 的值为 true,则错误处理程序的输出参数必须为标量,而且数据类型必须与 func 的输出相同。

错误处理程序的第一个输入参数是包含以下字段的结构体:

  • identifier - 错误标识符

  • message - 错误消息文本

  • index - 输入数组中 func 引发错误的位置的线性索引

错误处理程序的其余输入参数是致使 func 引发错误的 func 调用的输入参数。

假设 func 返回两个双精度值作为输出参数。您可以将错误处理程序指定为 'ErrorHandler',@errorFunc ,其中 errorFunc 是引发警告并返回两个输出参数的函数。

function [A,B] = errorFunc(S,varargin)
    warning(S.identifier, S.message); 
    A = NaN; 
    B = NaN;
end

如果您不指定 'ErrorHandler' ,则 cellfun 会再次引发由 func 引发的错误。

输出参数

全部折叠

输出数组,以任意数据类型的数组形式或以元胞数组形式返回。

默认情况下, cellfun func 的输出串联成数组。 func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。

  • 支持通过对象数组的线性索引进行赋值

  • 具有一个 reshape 方法,可返回与输入大小相同的数组

如果 'UniformOutput' 名称-值对组参数的值为 false ( 0 ),则 cellfun 将以元胞数组形式返回输出。在这种情况下, func 的输出可以具有任意大小和不同的数据类型。

扩展功能

版本历史记录

在 R2006a 之前推出

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.