• arrayfun用法(转)


    http://blog.sina.com.cn/s/blog_7cf4f4460101bnhh.html

    利用arrayfun函数可以避免无谓的循环,从而大大提高代码的简介性。
    1、A=ARRAYFUN(FUN, B)
    FUN是函数句柄,对B中的每一个元素调用FUN函数(计算顺序随意),结果存放于A中,size(A)==size(B)
    FUN函数可接受numeric, logical, char, struct, cell的自变量类型。
    2、[A, B, ...] = ARRAYFUN(FUN, C, ...)
    FUN函数的返回值是一个向量,对B中的每一个元素调用FUN函数,计算结果放在A,B…中。
    3、 A = ARRAYFUN(FUN, B, C,  ...)
    FUN函数接受参数不唯一,分别调用B, C,  ...中的元素,A(i,j...)=Fun(B(i,j...),C(i,j,...)...),
    B,C...大小必须相等。
    例1、Fun调用B中的一个数值
    >> s=[1 2;3 4];
    >> f=@(x) x^2;
    >> arrayfun(f,s)
    ans =
         1     4
         9    16
    复制代码
    例2、Fun的接受参数是一个向量
    >> ss=num2cell(s,2);
    >> f=@(x) sum(x{:}.^2);
    >> arrayfun(f,ss)
    ans =
         5
        25
    复制代码
    例3、Fun函数返回值是向量
    >> F=@(x) x{:}.^2;
    >> cell2mat(arrayfun(F,ss,'UniformOutput',false))
    ans =
         1     4
         9    16
    复制代码
    例4、Fun函数参数不唯一
    >> f=@(x,y) x^2+y^2;
    >> [X,Y]=meshgrid(-2:2,-1:5);
    >> Z=arrayfun(f,X,Y);
    >> mesh(X,Y,Z)
    复制代码
    例5、Fun函数的参数不唯一,而且都是向量
    >> F=@(f,h)sum(diff(f{:}).^2)+sum(diff(h{:}).^2);
    >> f=[1,2,3;3,4,5;1,2,5];
    >> h=[2,4;4,5;];
    >> ff=num2cell(f,2);
    >> hh=num2cell(h,2);
    >> fff=repmat(ff',length(hh),1);
    >> hhh=repmat(hh,1,length(ff));
    >> arrayfun(F,fff,hhh)
    ans =
         6     6    14
         3     3    11
    复制代码
    C2=num2cell(A)是把A中的每一个元素作为cell的元素,这样每个元素是一个数;C2=num2cell(A,1)是把矩阵A的每一列作为cell的元素,这样cell的每个元素是一个列向量。同样的还有C2=num2cell(A,2)表示把A中的每一行作为一个cell元素

  • 相关阅读:
    现代操作系统-读者/写者问题
    现代操作系统-进程互斥
    关于网页强制被跳转到wpkg.org的解决
    Leetcode Count Prime
    Leetcode Add Two Numbers
    Leetcode Two Sum
    can't find -lsocket的解决办法
    删除Windows右键不用的选项
    Linux下的另一个词典GoldenDict
    spark执行例子eclipse maven打包jar
  • 原文地址:https://www.cnblogs.com/aminxu/p/4686615.html
Copyright © 2020-2023  润新知