利用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元素