Matlab cellfun函数

Matlab中有一个数组类型,叫做Cell,Cell是一种广义数组,他的每个元素称之为一个单元,每个单元可以是任意类型数组,比如数值数组,字符串,结构体或者一个子Cell.因此每个单元可以有不同的大小.

cellfun是将一个函数运用到Cell数组中的所有元素

语法:

  • [A1,…,Am] = cellfun(func,C1,…,Cn)
  • [A1,…,Am] = cellfun(func,C1,…,Cn,Name,Value)

[A1,…,Am] = cellfun(func,C1,…,Cn)调用函数句柄func指定的函数,并传递Cell数组中的元素C1,…,Cn,n是传递到函数的参数个数,输出数组A1,…,Am,m为func函数输出的数量.第i次迭代对应于语法为[A1(i),…,Am(i)] = func(C1{i},…,Cn{i})。cellfun函数不能指定顺序来执行func函数。

[A1,…,Am] = cellfun(func,C1,…,Cn,Name,Value)调用函数func,附加选项通过一个或多个”Name,Value”键值对参数指定,Name可以取值”UniformOutput”或者”ErrorHandler”.

键值对参数

  • ‘UniformOutput’:逻辑值如下
    • true 表示对于所有输入,函数func的每一个输出都是一个标量单元数组,标量结构,或者一个总是相同类型和大小的标量值。cellfun函数将输出组合为A1,…Am的数组。每个输出数组都与单独的函数输出类型相同。
    • false要求cellfun函数将输出组合成单元数组A1,…,Am。函数func的输出可以是任何大小或类型。
  • ‘ErrorHandler’ 一个函数句柄,捕获所有MATLAB执行此函数遇到的错误,定义这个函数来重新抛出错误或者返回一个有效的输出.

Examples
计算Cell数组中元素的平均值.

    C = {1:10, [2; 4; 6], []};
    averages = cellfun(@mean, C)
    % 返回结果
    averages =    5.5000    4.0000       NaN
    [nrows, ncols] = cellfun(@size, C)
    % 返回结果
    nrows =
         1     3     0
    ncols =
        10     1     0

创建一个包含字符向量的单元数组,并将其缩写为前三个字符。由于输出字符矢量为非标量,因此将UniformOutput设置为false。

days = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};
abbrev = cellfun(@(x) x(1:3), days, 'UniformOutput', false)
%   abbrev =     'Mon'    'Tue'    'Wed'    'Thu'    'Fri'

语法 @(x)创建了一个匿名函数.

计算两个单元阵列C和D之间的协方差,因为协方差输出是非标量,将UniformOutput设为false。

c1 = rand(5,1);  c2 = rand(10,1);  c3 = rand(15,1);
d1 = rand(5,1);  d2 = rand(10,1);  d3 = rand(15,1);
C = {c1, c2, c3};
D = {d1, d2, d3};

covCD = cellfun(@cov, C, D, 'UniformOutput', false)
% covCD =     [2x2 double]    [2x2 double]    [2x2 double]

定义并调用自定义错误处理函数。

function result = errorfun(S, varargin)
   warning(S.identifier, S.message);
   result = NaN;
end

A = {rand(3)};
B = {rand(5)};
AgtB = cellfun(@(x,y) x > y, A, B, 'ErrorHandler', @errorfun, ...
               'UniformOutput', false)
  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`cellfun` 函数MATLAB 中一种非常有用的函数,它可以对 cell 数组进行逐个元素的操作。`cellfun` 函数对每一个 cell 数组元素应用一个特定的函数,然后将每个函数的结果合并为一个数组。 `cellfun` 函数的语法如下: ``` B = cellfun(fun,A) B = cellfun(fun,A,'UniformOutput',false) B = cellfun(fun,A1,...,An) B = cellfun(fun,A1,...,An,'UniformOutput',false) ``` 其中 `fun` 是要应用于每个元素的函数句柄或函数名称。`A` 是要处理的 cell 数组。`B` 是处理结果的数组。如果 `UniformOutput` 参数设置为 `true`(默认值),则 `B` 是一个标量或数组,其中每个元素都是 `fun` 函数的结果。如果 `UniformOutput` 参数设置为 `false`,则 `B` 是一个 cell 数组,其中每个元素都是 `fun` 函数的结果。 下面是一个简单的例子,演示了如何使用 `cellfun` 函数将一个 cell 数组的每个字符串都转换为大写: ```matlab % 创建一个 cell 数组 strs = {'hello', 'world', 'from', 'matlab'}; % 使用 cellfun 函数将每个字符串转换为大写 upper_strs = cellfun(@upper, strs, 'UniformOutput', false); % 显示结果 disp(upper_strs); ``` 该代码将输出以下内容: ``` 'HELLO' 'WORLD' 'FROM' 'MATLAB' ``` 在上面的代码中,`@upper` 是一个函数句柄,表示将每个字符串转换为大写。`UniformOutput` 参数设置为 `false`,因此 `upper_strs` 是一个 cell 数组,其中每个元素都是一个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值