已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章,元胞和架构,荆华 ,MATLAB使用详解2012学年选修课,第5章 元胞和构架,元胞(Cell)和构架(Structure)是MATLAB7.0所有15种数据类型中较为特殊的两种。一般来说,一个数据只能是一种数据类型,而元胞和构架这两种类型的数据却可以包含多种类型的数据。元胞和构架的表现形式分别是元胞数组(Cell Array)和构架数组(Structure Array),本章主要介绍这两种数据类型的概念、性质特点和使用方法。,5.1 元胞,元胞是MATLAB7.0中一个重要的数据类型,是元胞数组的基本组成单位,元胞可以包含不同类型和大小的数据,包括数值数组、逻辑类型、字符串类型及元胞本身,这样可以使得不同类型的相关数据集中在一个单一的变量中表示,从而给数据存储和操作带来了方便。,5.1.1 直接创建元胞数组,创建一个元胞数组,常用方法有两种,直接赋值创建和函数生成。元胞创建最简单、最直接的方法是直接输入元胞数组的各个元胞。,应用举例:,例如,生成一个22的元胞数组,其包含4个元胞,元素类型分别是标量、整型数组、字符串和元胞数组。 a=8,ones(2);cell array,cell(2,2) % 元胞数组包含4个类型不同的元胞 a = 8 2x2 double cell array 2x2 cell ,注意:元胞数组与一般数组生成方法不同的是包含数组的符号不是小括号而是大括号;相同的是都是用逗号或者空格分隔列,用分号分隔行。,内容索引法和元胞索引法创建元胞,如果元胞数组较复杂时,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 2x2 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,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 = ,函数cellplot图形显示元胞数组的结构,在Matlab窗口调用cellplot函数,执行结果如下。 注意:对于不同的数据类型的元胞,图形的形状和颜色不同,例如,整数类型的数据a(1,1)显示为红色的矩形,而元胞数组类型的数据a(2,1)则显示为条状的分格矩形。,5.1.3 元胞数组的扩容、删减,针对元胞数组的操作主要包括元胞数组的扩容、删减和重置。对于元胞数组的这些操作和对于数值数组的操作基本类似,都是针对数组元胞本身进行,而不涉及元胞的内容,所以,以下的操作只用到元胞索引方式。,扩充一个元胞数组,在介绍“矩阵与数组”时曾介绍过给一个矩阵添加一个超出其尺寸的元素时,系统将自动补0以满足新矩阵的尺寸大小,矩阵由此扩容。元胞数组的扩容规则基本类似,唯一不同的是,系统自动添加的不是元素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)处自动生成空矩阵。,删除一个元胞数组的行或列,可以把需要删除的部分设为空矩阵。例如删除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列元胞的内容。 在Matlab命令窗口中输入如下代码: a1,2 执行结果如下: ans = 1 1 1 1 若采用元胞索引方式访问a中第1行第2列,在Matlab命令窗口输入a(1,1),其执行结果为ans = 2x2 double,注意:元胞索引得到的是元胞的标识,而内容索引得到的是元胞的内容。,5.1.6 字符串元胞数组,在生成字符串时,面对不同字符串的长度不等的情况时,不可能仔细的计算空格的个数,所以,MATLAB引入了字符串元胞数组的形式来生成字符串。字符串元胞数组比字符数组的优点是不要求数据尺寸和类型的一致,给数据的输入和整合提供了极大的方便。生成字符串元胞数组时需要使用大括号。,应用举例:,在Matlab命令窗口中输入如下代码: 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),它们没有从属关系,并以下标来区分。在构架中存放数据之前,必须首先划分“域(field)”,数据并不是直接存放在构架中,而是存储在域里,构架可以存储任意类型的数据,且不同构架数组中的同域可以存放不同的内容。,5.2.1 创建构架数组,与元胞不同的是,构架采用点“.”来访问数据,有C语言基础的同学可能更好理解,这是因为构架数组具有面向对象的数据结构功能。创建一个构架,可以采用点号为构架的各个域赋初值。,应用举例:,例:用户需要建立一个构架,来存储有关家庭的信息,这里给构架命名为family,在命令窗口输入代码及执行结果如下。 family.number=3; family.people=father,mother =光荣之家 执行结果: 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&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元,采用直接赋值法创建包含他们生病信息的构架数组。, 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; patient(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: name 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年法硕真题答案详解及解析
- 《七年级英语下册Unit-6-rain-or-shine-Section-B-2a-2b》教案
- 2026届陕西省安康市汉阴县第二高级中学化学高一第一学期期末教学质量检测试题含解析
- 湖北省利川市第五中学2026届化学高一上期末经典试题含解析
- 2026届江苏省泰州市兴化一中化学高三第一学期期末调研试题含解析
- 江苏省南通市包场中学2026届化学高一第一学期期末预测试题含解析
- 江苏省各地2026届化学高一第一学期期中质量检测试题含解析
- 吉林省辽源市2026届高一化学第一学期期末经典试题含解析
- 2025年智能健康生活社区建设方案
- 金融咨询服务合同范本
- 定位技术在物流中的应用
- 口腔医疗材料应用与发展
- 小作坊食品检验管理制度
- 《道路勘测设计》课件-第三章 平面设计
- 挂牌责任督学培训课件
- 装配电工培训
- 2025年中国OA胶辊制品市场调查研究报告
- 2025年凉山昭觉县委社会工作部选聘社区工作者题库带答案分析
- DZ/T 0259-2014陆地石油和天然气调查规范
- 单位定点洗车装潢协议书
- 钢管加工合同协议
评论
0/150
提交评论