二、Matlab 之 cell数组

举报
ReCclay 发表于 2022/02/22 02:02:56 2022/02/22
【摘要】 类型()是cell数组 ,{}是实际类型.结果显示是一致的 对cell型变量元素的引用应当采用大括号作为下标的标示,用小括号作为下标标示时,将只显示该元素的压缩形式。 删除cell中的元素,...

类型()是cell数组 ,{}是实际类型.结果显示是一致的

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

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

一、定义

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

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

   
  
  • 1

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

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

   
  
  • 1

二、使用

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

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

A =

[1x4 double] [2.5000] 'abc'

>> A(1,1)

ans =

[1x4 double]
>>  A{1,1}

ans =
2 3 4
>> A(1,2)

ans =

[2.5000]

>> A{1,2}

ans =

2.5000
>>  A(1,3)

ans =

'abc'
>> A{1,3}

ans =

abc
>> A{1,1}(2)

ans =

2
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

三、赋值

cell数组的每一个都可以是一个矩阵,或者字符,或者…..

>> A{1,2} = 3:4
A =
[1x4 double] [1x2 double] 'abc'
>>  A{1,2}
ans =
3 4
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

四、删除

>> A
A =

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

>> A(2) =  []
A =

[1x4 double] 'abc'

>> A{2} = []
A =

[1x4 double] []
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

五、相关函数

cellplot(A)

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 改变细胞型数组的结构

——————–分割线———————————————–

刚学matlab,突然就发现这个东西了,首先特别高兴。因为“慢下来则意味着成长”。有了厚积,才能有薄发。

【】、{} 以及 ()
估计是每个人初学者都绕不过的问题,很幸运。我感觉是戳到matlab的重点(maybe)。。。。

【】呢就是来新建向量和矩阵的!非cell类型!、

{} 主要就是cell类型的使用,引用具体内容!还可以用于cell的赋值。

() 一是用在矩阵的下标。如果是cell类型的,则是压缩后的cell。。

看例子?。。

构建一个非cell矩阵

A = 【1 2 3】 %中括号构建一个非cell的矩阵。然后A(1) = 1,(当然写A([1]) =
1也是可以的!)(关于元素访问可以戳这里详细

其实A(1,1) = 1。。。那么同样的道理,A(2) = A(1,2)….(有没有对列优先这个概念又有了深一层的体会哈。。)

关于{}的用法

其实上面cell的学习中已经说到了,前后呼应。。哈哈哈。。。
那再举个例子也无妨。。。

Eg: A = {1:4, 2.5, ‘hello’}
如果要引用cell的具体内容就可以这样,,,,A{1}=A{1,1} = 2.5(因为就一行嘛,直接写也无妨!)

还有就是赋值,A{1,2} = 3:4 这样2.5就变成了矩阵[3,4]

emmmm,,,,,,其实赋值还可以这样操作。。。。
A(1,2) = [{3:4}]

这样也行的,,,思路也很简单哈,,,你想。。。小括号是压缩后的数据,不就相当于一个笼统意义上的矩阵嘛!我们在矩阵里面cell类型的具体数值不就行了。。。。

当然了,,这个操作确实有点骚,还是第一种好记,也好理解。。。

()的操作

其实上面两个的使用,就是在使用(),因为()是引用。。。

综合起来还有更骚的。。。。

eg:
A = 【1 2 3】
B = {A A}

B(1) 是一个cell类型的矩阵 – 其实是A矩阵,
B{1} 是cell矩阵中的内容 – 其实是A矩阵中的内容。

A是矩阵,我们当然就可对矩阵中的单个元素进行操作,比如B{1}(1,2) = 2 – 就是取A矩阵中的第二个元素2。。。

加入再嵌套一层呢?

C = { B B }
再对A中的第二个元素进行操作就可以这样
C{1}{1}(1,2)

哈哈,,,,如何。。。。。当然了,普通【】构成的矩阵是不能用{ }引用!!!

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/78620415

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。