海外主机测评

您现在的位置是:首页 > 云服务器代理 > 正文

云服务器代理

CELLFUNcellfun函数

cds8202023-04-21云服务器代理138
本文目录一览:1、cellfun函数的问题2、如何将cell阵列中的资料个别做计算matlab?3、matlab中cell数组用法4、元胞数组包括三维矩阵吗5、关于这个

本文目录一览:

  • 1、cellfun函数的问题
  • 2、如何将cell阵列中的资料个别做计算matlab?
  • 3、matlab中cell数组用法
  • 4、元胞数组包括三维矩阵吗
  • 5、关于这个cellfun函数是怎么用的
  • 6、MATLAB3: 矩阵分块函数mat2cell 及 cellfun 函数

cellfun函数的问题

你想实现什么功能?

str2num的作用是把字符串转换为数值类型,字符串'00110011'转为数值型当然就是110011了。

至于cellfun,无非是对于一个cell数组中的每个单元都进行str2num操作。

如何将cell阵列中的资料个别做计算matlab?

个别引用cell里面的元素,其实和引用一般的矩阵元素相似,只是不用小括号而用大括号\x0d\x0aa{1,2}这就可以引用a中1行二列的元素,如果元素本身是一个一般的数据矩阵,那么可以\x0d\x0aa{1,2}(1,2)引用cell矩阵a中1行2列的元素中(该元素是个一般数据矩阵)的1行2列的数\x0d\x0a按照这样的引用,不难对cell矩阵中每个单元中的数据去做相应的操作\x0d\x0a而对整个cell矩阵每个元素都操作的话,也不难用循环去实现\x0d\x0a\x0d\x0a对于整个cell矩阵每个元素都要进行相同操作的时候后\x0d\x0a可以用cellfun实现,效率要比用循环高\x0d\x0a例如,我们要求cell矩阵中每一个元素的长度(假设原来每一个元素都是矩阵),那么可以\x0d\x0ab=cellfun(@length,a);\x0d\x0ab就会返回一个形状和a一样的矩阵,由于length返回一个标量,所以b退化为一般的数据矩阵\x0d\x0ab中的每一个数,对应于a中相应位置矩阵的长度\x0d\x0a\x0d\x0a我们也可以自己设定函数,让cellfun将函数实施于cell矩阵的每一个元素\x0d\x0a例如你要求每个cell的(对角元素和+1)/4,那么可以这样\x0d\x0afunc=@(x)(sum(diag(x))+1)/4;\x0d\x0ab=cellfun(func,a);\x0d\x0a那么b就是a中每个矩阵的(对角和+1)/4\x0d\x0a这里的func我用了匿名函数\x0d\x0a你也可以直接写一个函数m文件\x0d\x0a\x0d\x0a其实就是把你要对其中每一个数组的操作写成一个函数\x0d\x0ay=func(x)(利用输入数组x计算产生结果y的函数func)\x0d\x0a\x0d\x0ab=cellfun('func',a);\x0d\x0a其实等价于\x0d\x0afori=1:size(a,1)\x0d\x0aforj=1:size(a,2)\x0d\x0ab(i,j)=func(a{i,j});\x0d\x0aend\x0d\x0aend\x0d\x0a只是用cellfun的书写效率和运行效率都比用循环的效率高\x0d\x0a\x0d\x0a注意,如果你的函数y=func(x)返回的y不是一个标量值\x0d\x0a而是矩阵,字符串,cell数组等不单单占一个存储空间的数据时\x0d\x0a要设置cellfun的输出形式UniformOutput为0\x0d\x0ab=cellfun('func',a,'UniformOutput',0);\x0d\x0a这时候b也是一个cell矩阵了,每个元素是根据a中计算的结果\x0d\x0a例如a中的元素都是3x3的矩阵,现在要求其每个矩阵的逆矩阵\x0d\x0ab=cellfun(@inv,a,'UniformOutput',0);

matlab中cell数组用法

cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体

1.cell数组的创建

可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};

也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};

2.cell数组的访问

与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。

3.cell数组相关的函数

cell:创建空的元胞数组,预分配内存

celldisp:显示元胞数组所有内容

cellplot:利用图形方式显示内容(因缺思厅!)

cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)

mat2cell:将普通矩阵转化成元胞数组

iscell:判断输入是否为元胞数组

cellfun:为cell数组的每个cell单元执行指定的函数,fun可以是特殊的函数或者句柄

b={[1,2,1];[2,1,1];[1,1,2]};

c=cellfun(@(x)(mat2str(x)),b,'un',0)

更一般的例子参见

4.cell单元的删除

我们知道矩阵及矩阵的删除可以通过[]实现:

元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()

a={1,2,3};

a{1}=[];%并不能删除第一个cell单元,只是变成空值

a(1)=[];%删除第一个单元

a(:)=[];%一次性删除所有cell单元

如果p为一个数,那么h(1)=p,是没有问题的。

如果p为一个向量,那么h(1,:)=p是没有问题的。

如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的。

那么要如何处理呢?

这时就用到了cell数据类型了。cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。

a=cell(n,m)

那么就把a初始化为一个n行m列的空cell类型数据。

如何赋值呢?

a{1,1}=rand(5)

那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。

那么要用第一个单元中的方阵中的某个值呢?

可以如下引用:a{1,1}(2,3)

就可以了,引用cell单元时要用{},再引用矩阵的某个数据就要用()了。

cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。

元胞数组包括三维矩阵吗

数据结构

matlab的元胞数组

懂不董02

原创

关注

3点赞·1914人阅读

在Matlab中,元胞数组是一种特殊数据类型,可以将元胞数组看作一种无所不包的通用矩阵(广义矩阵),组成元胞数组的元素可以是任何一种数据类型的常数或常量。

数据类型可以是字符串、双精度数、稀疏矩阵、元胞数组、结构或者其他matlab数据类型,每一个元胞数据可以是标量、向量、矩阵、N维数组,每一个元素可以具有不同的尺寸和内存空间,内容可以完全不同,元胞数组的元素叫做元胞,元胞数组的内存空间是动态分配的,元胞数据的维数不受限制,访问元胞数据可以单下标方式或全下标方式。

元胞数组的创建主要有以下几种方法:

1.使用运算花括号{},将不同类型和尺寸的数据组合在一起构建一个元胞数组;

2.将数组的每一个元素用{}括起来,然后再用数组创建的符号[]将数组的元素括起来构成一个元胞数组;

3.用{}创建一个元胞数组,Matlab能够自动扩展数组的尺寸,没有明确赋值的元素作为空元胞数组存在;

4.用函数cell创建元胞数组。该函数可以创建一维、二维或者多维元胞数组,但创建的数组都为空元胞。

元胞数组的基本操作:

元胞数组的基本操作包括对元胞和元胞数据的访问、修改、元胞数组的扩展、收缩或者重组。操作数值的函数也可以应用在元胞数组上。

在Matlab中元胞数组的访问有以下几种方法:

1.可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;

2.使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;

3.将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。

元胞元素的扩充、收缩和重组均与数值数组大体相同。

A=[{zeros(2,2,2)},{'word'},{15.36},{1:100}]

B=A(1,2)

class(B)

whos

A =

[2x2x2 double] 'word' [15.3600] [1x100 double]

B =

'word'

ans =

cell

Name Size Bytes Class Attributes

A 1x4 1328 cell

B 1x1 120 cell

ans 1x4 8 char

登录后复制

A=[{zeros(2,2,2)},{'word'};{15.36},{1:10}]

B=A{1,2}(2)

C=A{2,2}(5:end)

class(C)

F=A{4}([1 3 5])

whos

A =

[2x2x2 double] 'word'

[ 15.3600] [1x100 double]

B =

o

C =

5 6 7 8 9 10

ans =

double

F =

1 3 5

Name Size Bytes Class Attributes

A 2x2 1328 cell

A1 1x1 8 double

A2 1x1 8 double

A3 1x1 8 double

B 1x1 2 char

C 1x96 768 double

F 1x3 24 double

ans 1x6 12 char

登录后复制

元胞数组的扩充示例:

A=[{zeros(2,2,2)},{'word'};{15.36},{1:10}]

B=cell(2)

B(:,1)={char('hello','Welcome');10:-1:5}

C =[A,B]

D=[A,B,C]

whos

A =

[2x2x2 double] 'word'

[ 15.3600] [1x10 double]

B =

[] []

[] []

B =

[2x7 char ] []

[1x6 double] []

C =

[2x2x2 double] 'word' [2x7 char ] []

[ 15.3600] [1x10 double] [1x6 double] []

D =

[2x2x2 double] 'word' [2x7 char ] [] [2x2x2 double] 'word' [2x7 char ] []

[ 15.3600] [1x10 double] [1x6 double] [] [ 15.3600] [1x10 double] [1x6 double] []

Name Size Bytes Class Attributes

A 2x2 608 cell

A1 1x1 8 double

A2 1x1 8 double

A3 1x1 8 double

B 2x2 316 cell

C 2x4 924 cell

D 2x8 1848 cell

F 1x3 24 double

ans 1x6 12 char

登录后复制

元胞数组的操作函数:

函数 说明

cell 创建空的元胞数组

cellfun 为元胞数组的每个元胞执行指定的函数

celldisp 显示所有元胞的内容

cellplot 利用图形方式显示元胞数组

cell2mat 将元胞数组转化为普通矩阵

mat2cell 将普通的值矩阵转变为元胞数组

num2cell 将数值数组转变为元胞数组

deal 将输入参数赋值给输出

cell2struct 将元胞数组转变为结构

struct2cell 将结构转变为元胞数组

iscell 判断输入是否为元胞数组

cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如下表:

函数 说明

isempty 若元胞为空,则返回逻辑真

islogical 若元胞元素为逻辑类型,则返回逻辑真

isreal 若元胞元素为实数,则返回逻辑为真

length 元胞元素的长度

ndims 元胞元素的维数

prodofsize 元胞元素包含的元素个数

cellfun函数还有以下两种用法:

cellfun(‘size’,C,K)用于获取元胞数组元素第K维的尺寸。

cellfun(‘isclass’,C,classname)用于判断元胞数组的数据类型。

用法如下:

A={rand(2,2,2),'word',pi,17,1+i,magic(5)}

B=cellfun('isreal',A)

C=cellfun('length',A)

A =

[2x2x2 double] 'word' [3.1416] [17] [1.0000 + 1.0000i] [5x5 double]

B =

1 1 1 1 0 1

C =

2 4 1 1 1 5

登录后复制

D={[1] [2 3 4];[5;9] [6 7 8; 10 11 12]}

E=cell2mat(D)

D =

[ 1] [1x3 double]

[2x1 double] [2x3 double]

E =

1 2 3 4

5 6 7 8

9 10 11 12

登录后复制

D=[1 2 3 4; 5 6 7 8; 9 10 11 12]

E=mat2cell(D,[1, 2],[1,3])

D =

1 2 3 4

5 6 7 8

9 10 11 12

E =

[ 1] [1x3 double]

[2x1 double] [2x3 double]

登录后复制

参考:《MATLAB GUI程序设计》王广、邢林芳

matlab

数据结构

破壁机一般的价格是多少

精选推荐

广告

Matlab 元胞数组和结构体

473阅读·0评论·0点赞

2022年1月26日

Matlab中不同类的有效合并

807阅读·0评论·1点赞

2021年3月29日

Matlab中cell2mat函数使用

7087阅读·1评论·3点赞

2021年9月22日

Matlab中的元胞数组

2033阅读·0评论·2点赞

2020年8月4日

Matlab中的元胞数组(cell)

9.6W阅读·10评论·170点赞

2019年7月26日

matlab 元胞数组

1759阅读·0评论·0点赞

2021年9月26日

双面屏幕手机

精选推荐

广告

matlab元胞元素_Matlab元胞数组(Cell Arrays)的创建及访问方式

4756阅读·0评论·5点赞

2021年2月1日

MATLAB深度学习LSTM 标签分类classificatiONLayer层,YTrain的设置出错

2195阅读·7评论·4点赞

2022年1月15日

元胞数组

4174阅读·0评论·5点赞

2019年6月13日

元胞数组的用法

2.0W阅读·0评论·2点赞

2014年12月1日

matlab学习笔记12_1单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

1988阅读·1评论·5点赞

2019年10月30日

Matlab中cell2mat,num2cell函数

3.1W阅读·2评论·10点赞

2017年8月10日

javascript ES5中 foreach()遍历方法

2547阅读·1评论·0点赞

2020年9月28日

matlab 编程实例: 如何统计元胞数组中元素的数量

946阅读·0评论·0点赞

2022年6月24日

matlab元胞数组

991阅读·0评论·1点赞

2019年10月15日

matlab数组元素的个数,matlab数组元素个数

3714阅读·0评论·0点赞

2021年5月6日

如何使用Matlab中的元胞数组?

2529阅读·2评论·1点赞

2021年4月16日

MATLAB元胞数组

2.0W阅读·0评论·4点赞

2017年1月17日

matlab cell2mat报错:元胞内容引用自非元胞数组对象

3978阅读·0评论·0点赞

2020年11月15日

去首页

看看更多热门内容

关于这个cellfun函数是怎么用的

就是一致性输出的问题 如果函数返回的是一个标量,cellfun可以用一致输出,函数会把输出合并成一个矩阵 矩阵的维度大小和原来的cell数组的维度大小一致 如果函数返回不是标量,就不能用一致输出 你的函数 返回的是3x1的矩阵,所以不能用一致输出

MATLAB3: 矩阵分块函数mat2cell 及 cellfun 函数

MATLAB 矩阵分块函数 mat2cell 及 cellfun 函数

  mat2cell 函数就是将矩阵转化成胞元数组(cell array),用数学的语言讲就是矩阵分块。x是60*50的大矩阵。

  cellfun 函数就是对每一个块做相同的操作,例如求和、求均值等等,用这个函数就避免了写 for 循环了,也算是 matlab 向量化运算的一个例子。

  y=cell2mat(c)

  这里y相当于大矩阵x

matrix

mc{1,1}

mc{1,2}

sum_of_everyone = cellfun(@(x) sum(x(:)), mc)

关于CELLFUN和cellfun函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~