您的位置:首页 > 编程语言 > MATLAB

matlab usage: cellfun

2016-05-02 18:54 435 查看
举个简单的例子,比较下下面两段代码

A = {'ab','abc','abcd'};

l = cellfun(@(x)length(x),A)

-------------------------------------------

A = {'ab','abc','abcd'};

l2 = zeros(1,3);

for k = 1:length(A)

l2(k) = length(A{k});

end

-----------------------------------------

向量化编程:arrayfun及cellfun函数的使用

arrayfun这个built-in函数来实现将任意函数应用到数组内包括结构在内的所有元素。这样很多以前不可避免的循环现在可以向量化了。而向量化正是Matlab不遗余力追求的核心思想之一。

举例一

生成一个这样的n*n矩阵a:a(i,j)=dblquad(@(u,v)sin(u)*sqrt(v),0,i,0,j)(二重数值积分命令)。以n=10为例,可以这样做

%%%%%%%%%%

a=zeros(10);

forii=1:10

forjj=1:10

a(ii,jj)=dblquad(@(u,v)sin(u)*sqrt(v),0,ii,0,jj);

end

end

%%%%%%%

采用更具效率的向量化编程如下

%%%%%

[J,I]=meshgrid(1:10);

a1=arrayfun(@(ii,jj)dblquad(@(u,v) sin(u)*sqrt(v),0,ii,0,jj),I,J);

%%%%%%

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...大小必须相等。

例子2

quadl(@(x) arrayfun(@(xx)quadl(@(y) xx*y,sin(xx),cos(xx)),x),1,2)

这行代码体现了用MATLAB7.X求一般区域二重积分的一般方法。

Cellfun函数也有类似妙用。

example1:

functionaa=sumsum(a)

aa=sum(sum(a));

>>b=zeros(2,2);

>>c=ones(3,3);

>>d={b,c}

d =

[2x2double] [3x3 double]

cellfun(@sumsum,d)

ans=

0 9

example2:

CELLFUN Apply a function to each cell of a cell array.

a={'1 2 3 456' ['4 32 1' '95 7 6']}

a =

'1 2 3 456' '4 32 195 7 6'

>> b=cellfun(@str2num,a,'uniformOutput',false)%返回值不保存在cell

b =

[1x4 double] [1x5 double]

>> b{1}

ans =

1 2 3 456

>> b{2}

ans =

4 32 195 7 6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: