第5章元胞和构架28.ppt

上传人:本田雅阁 文档编号:2577902 上传时间:2019-04-11 格式:PPT 页数:35 大小:244.01KB
返回 下载 相关 举报
第5章元胞和构架28.ppt_第1页
第1页 / 共35页
第5章元胞和构架28.ppt_第2页
第2页 / 共35页
第5章元胞和构架28.ppt_第3页
第3页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章元胞和构架28.ppt》由会员分享,可在线阅读,更多相关《第5章元胞和构架28.ppt(35页珍藏版)》请在三一文库上搜索。

1、第五章,元胞和架构,荆华 ,MATLAB使用详解2012学年选修课,第5章 元胞和构架,元胞(Cell)和构架(Structure)是MATLAB7.0所有15种数据类型中较为特殊的两种。一般来说,一个数据只能是一种数据类型,而元胞和构架这两种类型的数据却可以包含多种类型的数据。元胞和构架的表现形式分别是元胞数组(Cell Array)和构架数组(Structure Array),本章主要介绍这两种数据类型的概念、性质特点和使用方法。,5.1 元胞,元胞是MATLAB7.0中一个重要的数据类型,是元胞数组的基本组成单位,元胞可以包含不同类型和大小的数据,包括数值数组、逻辑类型、字符串类型及元胞

2、本身,这样可以使得不同类型的相关数据集中在一个单一的变量中表示,从而给数据存储和操作带来了方便。,5.1.1 直接创建元胞数组,创建一个元胞数组,常用方法有两种,直接赋值创建和函数生成。元胞创建最简单、最直接的方法是直接输入元胞数组的各个元胞。,应用举例:,例如,生成一个22的元胞数组,其包含4个元胞,元素类型分别是标量、整型数组、字符串和元胞数组。 a=8,ones(2);cell array,cell(2,2) % 元胞数组包含4个类型不同的元胞 a = 8 2x2 double cell array 2x2 cell ,注意:元胞数组与一般数组生成方法不同的是包含数组的符号不是小括号而是

3、大括号;相同的是都是用逗号或者空格分隔列,用分号分隔行。,内容索引法和元胞索引法创建元胞,如果元胞数组较复杂时,Matlab提供了元胞索引法和内容索引法来创建元胞。 说明:1)使用元胞索引法时大括号要出现在赋值号的右边,而使用内容索引法时大括号要出现在赋值号的左边。 2)用来访问元胞的值,而()只用来标识元胞。,应用举例:,例:使用元胞索引法创建元胞。在Matlab中输入如下代码:大括号出现在赋值号右边 a(1,1)=8; a(1,2)=ones(2); a(2,1)=cell array; a(2,2)=cell(2,2) 结果为: a = 8 2x2 double cell array 2

4、x2 cell ,应用举例:,例2:使用内容索引法创建元胞,在Matlab中输入代码如下: 大括号出现在赋值号的左边 a1,1=8; a1,2=ones(2); a2,1=cell array; a2,2=cell(2,2) 结果为: a = 8 2x2 double cell array 2x2 cell ,5.1.2 调用函数生成元胞数组,刚才介绍了利用元胞索引法和内容索引法两种直接赋值的方法来创建元胞数组,元胞数组的另一种创建方法是函数生成法,即用cell函数预先产生一个空元胞数组,再向其中添加所需数据。,应用举例:,例:创建一个2X2的元胞数组。Matlab代码如下: a=cell(2

5、,2) a = 调用元胞索引法对元胞数组的空元胞赋值: a(1,1)=8; a(1,2)=ones(2); a(2,1)=cell array; a(2,2)=cell(2,2) 结果为 a = 8 2x2 double cell array 2x2 cell ,函数celldisp显示元胞数组的具体内容,Matlab提供了函数celldisp用于显示元胞数组的具体内容。在Matlab命令窗口输入代码 celldisp(a),执行结果: a1,1 = 8 a2,1 = cell array a1,2 = 1 1 1 1 a2,21,1 = a2,22,1 = a2,21,2 = a2,22,2

6、 = ,函数cellplot图形显示元胞数组的结构,在Matlab窗口调用cellplot函数,执行结果如下。 注意:对于不同的数据类型的元胞,图形的形状和颜色不同,例如,整数类型的数据a(1,1)显示为红色的矩形,而元胞数组类型的数据a(2,1)则显示为条状的分格矩形。,5.1.3 元胞数组的扩容、删减,针对元胞数组的操作主要包括元胞数组的扩容、删减和重置。对于元胞数组的这些操作和对于数值数组的操作基本类似,都是针对数组元胞本身进行,而不涉及元胞的内容,所以,以下的操作只用到元胞索引方式。,扩充一个元胞数组,在介绍“矩阵与数组”时曾介绍过给一个矩阵添加一个超出其尺寸的元素时,系统将自动补0以

7、满足新矩阵的尺寸大小,矩阵由此扩容。元胞数组的扩容规则基本类似,唯一不同的是,系统自动添加的不是元素0,而是空数组。以本小节开头介绍的的数组a为例,如果给其添加a(1,3),系统将会在a(2,3)处自动生成空数组,形成一个2*3的新元胞数组。,5.1.3 元胞数组的扩容,应用举例:,例:扩充元胞数组,在刚才元胞数组a中的第一行第三列添加字符串“addition” 在Matlab命令窗口中输入如下代码: a(1,3)=addition 执行结果如下: a = 8 2x2 double addition cell array 2x2 cell 系统会在a(2,3)处自动生成空矩阵。,删除一个元胞数

8、组的行或列,可以把需要删除的部分设为空矩阵。例如删除a的第3列,只需把第3列的所有元胞赋值为空矩阵。 在Matlab命令窗口中输入如下代码: a(:,3)= a = 8 2x2 double cell array 2x2 cell 注意:在删除元胞数组时不能删除单个的元胞,例如,仅删除a的第一行第三列的元胞,系统报错。,5.1.3 元胞数组的删除,5.1.4 访问元胞数组内容,访问元胞数组的内容,就是访问数组中元胞的内容,所以必须使用内容索引方式。,应用举例:,例:元胞数组 a = 8 2x2 double cell array 2x2 cell 访问a中第1行第2列元胞的内容。 在Matla

9、b命令窗口中输入如下代码: a1,2 执行结果如下: ans = 1 1 1 1 若采用元胞索引方式访问a中第1行第2列,在Matlab命令窗口输入a(1,1),其执行结果为ans = 2x2 double,注意:元胞索引得到的是元胞的标识,而内容索引得到的是元胞的内容。,5.1.6 字符串元胞数组,在生成字符串时,面对不同字符串的长度不等的情况时,不可能仔细的计算空格的个数,所以,MATLAB引入了字符串元胞数组的形式来生成字符串。字符串元胞数组比字符数组的优点是不要求数据尺寸和类型的一致,给数据的输入和整合提供了极大的方便。生成字符串元胞数组时需要使用大括号。,应用举例:,在Matlab命

10、令窗口中输入如下代码: str=this;is;a;apple 执行结果如下: str = this is a apple 说明:可以看到,变量str是一个字符串元胞数组,其每个单元显示都包含两边的单引号,且包含的字符串长度都不同。,5.1.7 字符数组与字符串元胞数组之间的转换,例:在Matlab命令窗口中输入 str1=char(str) 执行结果为: str1 = this is a apple,5.2 构架,构架数组(Structure Array) 和元胞数组有许多类似之处,两者都可以在同一数组中存放不同类型的数据,构架数组的组成单元是构架(structure),它们没有从属关系,并

11、以下标来区分。在构架中存放数据之前,必须首先划分“域(field)”,数据并不是直接存放在构架中,而是存储在域里,构架可以存储任意类型的数据,且不同构架数组中的同域可以存放不同的内容。,5.2.1 创建构架数组,与元胞不同的是,构架采用点“.”来访问数据,有C语言基础的同学可能更好理解,这是因为构架数组具有面向对象的数据结构功能。创建一个构架,可以采用点号为构架的各个域赋初值。,应用举例:,例:用户需要建立一个构架,来存储有关家庭的信息,这里给构架命名为family,在命令窗口输入代码及执行结果如下。 family.number=3; family.people=father,mother f

12、amily.name=光荣之家 执行结果: family = number: 3 people: father,mother&me name: 光荣之家,应用举例:, class(family) ans = struct size(family) ans = 1 1,函数struct创建构架数组,除了直接赋值的方法,创建构架数组还可以使用创建函数struct。具体格式为: Str=struct(field1,value1,field2,value2,fieldN,valueN) 例:在matlab命令窗口中输入如下代码: x=struct(num,3,people,father,mother&

13、me) 执行结果: x = num: 3 people: father,mother&me,5.2.2 访问构架数组元素,构架数组元素的访问与一般的矩阵类似,如果访问上面生成的构架数组family的第1列的所有元素, family(:,1) ans = number: 3 people: father mother name: 光荣之家,应用举例:,例:李红、赵祥和王瑞三位同学分别来自北京、济南和南京,最近他们生病住院了,他们的住院日期分别是2012.2.23,2012.2.25,2012.2.26号,预交的押金分别是2000元、3000元和3500元,采用直接赋值法创建包含他们生病信息的构架

14、数组。, patient(1,1).name=li hong; patient(2,1).city=北京; patient(3,1).billing=2000; patient(4,1).data=2012/2/23; patient(1,2).name=zhao xiang; patient(2,2).city=济南; patient(3,2).billing=3000; patient(4,2).data=2012/2/25; patient(1,3).name=wang rui; patient(2,3).city=南京; patient(3,3).billing=3500; patie

15、nt(4,3).data=2012/2/26,Whos patient X=patient(1,1).name X=patient(2,2).city,应用举例:,对上例通过struct函数创建一个一行三列的构架数组, struct(name,li hong,zhao xiang,wang rui,city,北京,济南,南京,billing,2000,3000,3500,data,2012/2/23,2012/2/25,2012/2/26) %若value值大于1个那么就要以字符串元胞数组的形式表达,即 , , , ans = 1x3 struct array with fields: nam

16、e city billing data, x=ans(1,1) x = name: li hong city: 北京 billing: 2000 data: 2012/2/23, patient(1,1).name=li hong; patient(1,1).city=北京; patient(1,1).billing=2000; patient(1,1).data=2012/2/23; patient(1,2).name=zhao xiang; patient(1,2).city=济南; patient(1,2).billing=3000; patient(1,2).data=2012/2/25; patient(1,3).name=wang rui; patient(1,3).city=南京; patient(1,3).billing=3500; patient(1,3).data=2012/2/26 patient = 1x3 struct array with fields: name city billing,5.3 小结,本章主要介绍MATLAB7.0中的两种重要的数据类型:元胞和构架。这两种数据类型可以实现在一个数组中存储不同类型的数据,需要掌握以下的内容。 元胞数组的创建 元胞数组的操作 字符串元胞数组 构架数组和元胞数组的联系和区别 构架数组元素的访问,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1