matlab定义空cell变量

matlab定义空cell变量,第1张

单元数组(Cell Array)将类型不同的相关数据集成到一个单一的变量中,使得大量相关数据的引用和处理变得简单方便;需要注意的是,单元数组仅仅是承载其他数据类型的容器,大部分的数学运算只是针对其中的具体数据进行的,而非针对单元数组本身进行。单元数组中的每一个元素称为单元(cell),单元可以包含任何类型的数据,如数值数组、字符、符号对象,甚至于其他的单元数组。单元数组可以使不同类型和不同维数的数组可以共存,细胞型数组实际上可以认为是一种以任意形式的数组为分量的多维数组。

中文名

单元

外文名

CELL

定义函数TA说参考资料

定义

1. 细胞型数据的定义:

1)直接赋值定义:细胞型变量在定义时需要使用大括号,元素用逗号隔开

例: B = {1:4,A,‘abcd’}

2)使用cell函数,预先为细胞型变量定义空间

例: A = cell(m,n) 定义一个空的m行n列的cell类型

函数

对细胞型变量元素的引用应当采用大括号作为下标的标示,用小括号作为下标标示时将只显示该元素的压缩形式。

比如:A = {1:4,2.5,‘abc’};

>>A

A =

[1x4 double] [2.5000] 'abc'

>>A(1,1)

ans =

[1x4 double]

>>A{1,1}

ans =

1 2 3 4

2 ) 改变cell类型元素的值

>>A{1,2} = 3:4

A =

[1x4 double] [1x2 double] 'abc'

>>A{1,2}

ans =

3 4

3 ) 删除cell中的元素 需要用A(1)=[] ,若使用A{1} =[]只能将该元素置空不能删除

3. 细胞型变量的函数

函数名 说明

cell(m,n) 创建一个m行n列的细胞型变量

cellfun('fun’,A) 对细胞型变量A作用fun函数,fun可以为isreal,isempty,length,islogical,ndims等

celldisp(A) 完全显示细胞型变量的内容

cellplot(A) 用图形显示细胞型变量的内容

num2cell 将数值数组转换为细胞型变量

deal 输入输出处理

cell2struct 将细胞型变量转换为结构型变量

struct2cell 将结构型变量转换为细胞型变量

iscell 判断是否为细胞型变量

reshape 改变细胞型数组的结构[1]

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)

更一般的例子参见https://cn.mathworks.com/matlabcentral/answers/99632-how-do-i-save-a-cell-array-that-contains-both-strings-and-numbers-to-an-ascii-file-in-matlab

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单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7857114.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存