主要内容

arrayfun

函数应用到数组的每个元素

描述

例子

B= arrayfun (函数,一个)应用函数函数的元素一个一次,一个元素。arrayfun然后连接输出函数到输出数组B,这样的th元素一个,B (i) = func ((i))。输入参数函数处理函数是一个函数,它接受一个输入参数,并返回一个标量。的输出函数可以有任何数据类型,只要该类型的对象可以连接。(见限制一个例外)。数组一个B有相同的大小。

你不能指定的顺序arrayfun计算的元素B或者依靠他们在任何特定的顺序。

B= arrayfun (函数A1,…)适用于函数数组的元素A1,…,一个,所以B (i) = func (A1 (i),…, (i))。这个函数函数必须采取n输入参数和返回一个标量。数组A1,…,一个所有人都必须有相同的大小。

例子

B= arrayfun (___,名称,值)适用于函数由一个或多个指定附加选项名称,值对参数。例如,返回单元阵列输出值,指定“UniformOutput”,假的。你可以返回B作为一个单元阵列函数返回值不能被连接到一个数组中。您可以使用名称,值对参数的输入参数的前面的语法。

例子

(B1,…,B米] = arrayfun(___)返回多个输出数组B1,…, Bm函数返回输出值。函数可以返回输出参数有不同的数据类型,但是每个输出的数据类型必须相同每次函数被称为。您可以使用该语法与任何输入参数的前面的语法。

输出参数的数量函数不需要指定的输入参数的数量一样A1,…,一个

例子

全部折叠

创建一个nonscalar结构数组。每个结构都有一个字段,其中包含一个向量随机的数字。向量有不同的大小。

(1)。f1= rand(1,5); S(2).f1 = rand(1,10); S(3).f1 = rand(1,15)
S =1×3结构体数组字段:f1

计算每个字段的意思年代通过使用arrayfun函数。你不能使用structfun这个计算,因为输入参数structfun必须是一个标量结构。

= arrayfun (@ (x)的意思是(x.f1), S)
一个=1×30.6786 0.6216 0.6069

创建一个结构数组中每个结构有两个包含数字的字段数组。

(1)。X = 5:5:100;(1)。Y =兰德(20);(2)。X = 10:10:100;(2)。Y =兰德(10);(3)。X = 20:20:100; S(3).Y = rand(1,5)
S =1×3结构体数组字段:X Y

画出数字数组。返回一个数组的图线对象情节功能和使用它们来添加不同的标记每一组数据点。arrayfun可以返回任何数据类型只要对象数组的数据类型可以连接。

图保存p = arrayfun (@ (a)情节(a.X a.Y), S);(1页)。标志=“o”;(2页)。标志=“+”;(3页)。标志=“年代”;持有

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象。

创建一个nonscalar结构数组。每个结构都有一个字段,其中包含数字矩阵。

(1)。f1= rand(3,5); S(2).f1 = rand(6,10); S(3).f1 = rand(4,2)
S =1×3结构体数组字段:f1

计算每个字段的意思年代通过使用arrayfun函数。的意思是返回包含每一列的均值向量,因此,意味着不能作为一个数组返回。返回单元阵列的方法,指定“UniformOutput”,假的名称-值对。

= arrayfun (@ (x)的意思是(x.f1)年代,“UniformOutput”假)
一个=1×3单元阵列{[0.6158 0.5478 0.5943 0.6977 0.7476]}{[0.6478 0.6664 0.3723 0.4882 0.4337 0.5536 0.5124 0.4436 0.5641 0.5566]}{[0.3534 - 0.5603]}

创建一个nonscalar结构数组。

(1)。f1= 1:10; S(2).f1 = [2; 4; 6]; S(3).f1 = []
S =1×3结构体数组字段:f1

计算每个字段的大小年代通过使用arrayfun函数。行和列的数量都在1×3数字数组。

[nrows, ncols] = arrayfun (@ (x)大小(x.f1), S)
nrows =1×31 3 0
ncols =1×310 1 0

输入参数

全部折叠

功能适用于输入数组的元素,指定为一个函数处理。

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

例子:B = arrayfun (@ round)返回的每个元素的整数部分一个

输入数组。一个可以属于任何一个数组的基本数据类型,除了吗时间表支持线性索引,或任何类。万博1manbetx

一个函数应用于一个表或时间表的内容,使用varfun,rowfun,splitapply,或groupsummary功能。

如果你定义的类一个属于,你还超载subsref大小的方法一个,然后arrayfun将这些要求一个:

  • 大小的方法一个必须返回一个数组的双打。

  • 一个必须支持线万博1manbetx性索引。

  • 返回的大小的乘积大小不得超过极限的方法一个所定义的线性索引一个

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:= arrayfun (@ (x)的意思是(x.f1)年代,UniformOutput,假)返回单元阵列的方法。年代是一个结构数组中每个结构都有一个字段命名f1

或真或假,指定为逗号分隔组成的“UniformOutput”,要么真正的(1)或(0)。

的价值“UniformOutput”

描述

真正的(1)

函数必须返回标量arrayfun连接到阵列。

(0)

arrayfun返回的输出函数在细胞阵列。的输出函数可以有任何大小和不同的数据类型。

函数来捕获错误,指定为逗号分隔组成的“ErrorHandler”和一个函数处理。如果函数抛出一个错误,然后指定的错误处理程序“ErrorHandler”捕获错误和行动中指定的函数。错误处理程序必须抛出一个错误或返回相同数量的输出函数。如果该值的“UniformOutput”是真的,那么错误处理程序的输出参数必须标量和有相同的数据类型的输出函数

的第一个输入参数错误处理程序是一个结构,这些字段:

  • 标识符——错误标识符

  • 消息——错误消息文本

  • 指数——线性的输入数组索引函数把错误

其余的输入参数的错误处理程序调用的输入参数函数使函数抛出的错误。

假设函数返回两个双打作为输出参数。您可以指定的错误处理程序ErrorHandler, @errorFunc,在那里errorFunc是一个函数,提出了一个警告,并返回两个输出参数。

函数[A, B] = errorFunc (S (S,变长度输入宗量)警告。标识符,S.message);一个=南;B =南;结束

如果你不指定“ErrorHandler”,然后arrayfun重新抛出错误抛出函数

输出参数

全部折叠

输出数组,返回任何数据类型的数组或单元阵列。

默认情况下,arrayfun连接的输出函数到一个数组中。函数必须返回标量。如果函数返回对象,那么类的对象属于必须满足这些要求。

  • 万博1manbetx支持赋值线性索引对象数组

  • 有一个重塑同样大小的方法,该方法返回一个数组作为输入

如果该值“UniformOutput”名称-值对的观点是(0),然后arrayfun返回输出单元阵列。在这种情况下,输出函数可以有任何大小和不同的数据类型。

限制

  • 异构数组

    arrayfun时不支持异构数组万博1manbetxUniformOutput被设置为真正的

  • 不同行为的复数的输入数组

    如果输入数组一个是一个复数,数组和一些元素的虚部等于零,然后调用吗arrayfun和索引数组可能导致不同的结果。的arrayfun总是把这些数字当作复数函数虚部等于零。然而,索引返回等价值观的实数。

    为了说明行为的差异,首先创建一个数组的复数。

    一个= 0 (2,1);(1)= 1;(2)= 0 + 1我
    一个我0.0000 + 1.0000 = 1.0000 + 0.0000

    然后创建一个单元阵列,并分配的元素一个到它。当你索引(1),其返回值为一个实数,因为其虚部等于零。你可以真正的和复杂的值存储在不同的细胞C1因为细胞数组可以存储数据有不同的类型。

    C1 =细胞(2,1);C1 {1} = (1);C1 {2} = (2)
    C1 = 2×1单元阵列{[1]}{[0.0000 + 1.0000我]}

    调用arrayfun和访问的元素一个。分配单元阵列其价值观。当arrayfun访问(1),它将这个值视为一个复杂的数量和分配C2 {1}

    C2 = arrayfun (@ x (x),,“UniformOutput”假)
    C2 = 2×1单元阵列{[1.0000 + 0.0000我]}{[0.0000 + 1.0000我]}

扩展功能

版本历史

之前介绍过的R2006a