《matlab结构数组》PPT课件.ppt

上传人:tia****nde 文档编号:11499109 上传时间:2020-04-26 格式:PPT 页数:24 大小:303.81KB
返回 下载 相关 举报
《matlab结构数组》PPT课件.ppt_第1页
第1页 / 共24页
《matlab结构数组》PPT课件.ppt_第2页
第2页 / 共24页
《matlab结构数组》PPT课件.ppt_第3页
第3页 / 共24页
点击查看更多>>
资源描述
MATLAB程序设计与应用结构数组,13-1结构数组的建立,每一个结构数组(StructureArray)可以包含很多个元素,每一个元素可以看成是一笔数据。因此每个元素可以包含数个字段(Fields),而每个字段可包含各个不同型态的数据。例如一个包含学生个人数据的结构数组,可能含有的字段是name(学生姓名)、id(学号)、scores(小考成绩)等。要建立此种结构,可在指令列直接输入个字段的值。,结构数组之范例一,范例13-1:struct01.mclearstudent%清除student变数student.name=洪鹏翔;%加入name字段student.id=mr871912;%加入id字段student.scores=58,75,62;%加入scores字段student%秀出结果student=name:洪鹏翔id:mr871912scores:58,75,62此时student即代表一个结构数组的第一个元素,或是第一笔数据。,结构数组之范例二,范例13-2:struct02.mclearstudent%清除student变数student.name=洪鹏翔;%加入name字段student.id=mr871912;%加入id字段student.scores=58,75,62;%加入scores字段%以下是新加入的第二笔数据student(2).name=邱中人;student(2).id=mr872510;student(2).scores=25,36,92;student%秀出结果student=1x2structarraywithfields:NameIdscoresdent=1x2structarraywithfields:NameIdscores,结构数组之范例二,此时student即代表一个12的结构数组。由于此结构数组已渐趋复杂,MATLAB并不将所有字段值印出。欲显示某元素的特定字段值,可输入明确的叙述,例如student(2).scores等。另一个建立结构数组的方法,则是使用struct指令,其格式如下:structureArray=struct(field1,value1,field2,value2,.)其中field1、field2、是字段名称,value1、value2、则是字段所包含的数据。如果value1、value2、为异质数组(CellArrays,详见第上一章),则MATLAB为依序将异质数组的每个元素设定为每一个结构中相对应的字段值,如以下范例13-3:,结构数组之范例三,范例13-3:struct03.mstudent=struct(name,张庭硕,张庭安,scores,5060,6070);student(1)%显示student(1)student(2)%显示student(2)ans=name:张庭硕scores:5060ans=name:张庭安scores:6070在上述使用法中,张庭硕,张庭安和5060,6070都是异质数组,因此他们的每个元素会被依次设定到每个结构之中。但是如果其中有一个异值数组的长度是1,那么MATLAB会进行纯量展开(ScalarExpansion)来自动补足,如以下范例13-4:,结构数组之范例四,范例13-4:struct04.mstudent=struct(name,张庭安,scores,5060,90100);student(1)%显示student(1)student(2)%显示student(2)ans=name:张庭安scores:5060ans=name:张庭安scores:90100在上述范例中,张庭安可视为异质数组的一个元素,因此在设定至student结构数组时,MATLAB会进行纯量展开,将张庭安分别设定到student的两个元素的name字段值。,结构数组之范例五,结构数组可以是巢状式(Nested)的,也就是说,结构数组的字段可是另一个结构数组,我们可以藉此产生复杂的数据结构范例13-5:struct05.mstudent=struct(name,张庭硕,张庭安,scores,5060,6070);student(2).course(1).title=WebProgramming;student(2).course(1).credits=2;student(2).course(2).title=NumericalMethod;student(2).course(2).credits=3;student(2).courseans=1x2structarraywithfields:titlecredits,13-2取用及改变结构数组的数据,Student结构数组,Student(1),Student(2),Student(3),.name=banny.scores=85,80,92,78,.name=joey.scores=80,85,90,88,.name=batty.scores=88,82,90,80,范例13-6:buildStruct01.mclearstudent%清除student变数student(1)=struct(name,Banny,scores,85,80,92,78);student(2)=struct(name,Joey,scores,80,85,90,88);student(3)=struct(name,Betty,scores,88,82,90,80);上述的student结构数组,可图标如下:,Struct2cell指令,欲取用结构数组中所有元素内所有字段的数据,可用struct2cell指令,例如:values=struct2cell(student)values(:,:,1)=Banny1x4doublevalues(:,:,2)=Joey1x4doublevalues(:,:,3)=Betty1x4double请注意,传回的values是一个异质数组。一般而言,若输入struct2cell指令的结构变量维度为mn,且包含p个字段,则传回异质数组的维度为pmn。(在上例中,p=2,m=1,n=3。),改变结构数组内容,在结构数组中,我们可以使用句点(”.”)来找出某一笔数据内的某一个特定字段值,例如我们仅想看看第二个学生是谁,此时我们可以输入:studentName=student(2).namestudentName=Joey在上例中,在此一学生结构数组的第二数组元素student(2)之后加上一点,再接上姓名字段名称name,即可取用此学生的实际姓名资料Joey,本例中进一步再将取出的学生姓名Joey储存在使用者自设的变量studentName之后显示于屏幕上。类似取用结构数组个别字段数据内容的作法,我们可以改变结构数组中个别字段的数据内容,例如:student(2).name=Alex;在上例中,student(2)的姓名已由原先的Joey改变为Alex。,CAT指令,MATLAB提供了cat指令,以达到并排字段值的目的,其语法为:A=cat(dim,structureField)其中,dim代表并排后所改变的维度。例如,欲将小考成绩左右(水平)并排,可输入:cat(2,student.scores)%2代表左右并排以改变直行的维度ans=858092788085908888829080欲将小考成绩上下(垂直)并排,可输入:cat(1,student.scores)%1代表上下并排以改变横列的维度ans=858092788085908888829080,计算平均,在进行并排时,必须确认被并排的字段值有相同的行数(上下并排)或列数(左右并排),否则就会因为维度不和而产生错误讯息。若要计算每次考试(共四次)的平均分数,可输入:average1=mean(cat(1,student.scores)average1=84.333382.333390.666782.0000若要计算每位学生(共三位)的平均分数,可输入下列表达式,但注意表达式后面单引号的使用代表矩阵的转置(Transpose),因为mean指令是对矩阵的每一直行进行平均值运算:average2=mean(cat(1,student.scores)average2=83.750085.750085.0000,并排运算,由于并排运算常被用到,MATLAB又提供下列两种方法方括号运算:可以左右合并结构数组中相同字段的数值矩阵,产生一个新的数值矩阵。大括号运算:可以左右合并结构数组中相同字段的数据,产生一个异值矩阵。若要把scores字段值进行左右合并,可以输入如下:allScores=student.scoresallScores=858092788085908888829080若要把name字段值抽取出来,形成由字符串组成的异值数组,可以输入如下:allNames=student.nameallNames=BannyAlexBetty,结构数组之范例七,范例13-7:printStruct01.mclearstudent%清除student变数student(1)=struct(name,张庭硕,scores,85,80);student(2)=struct(name,锺书蓉,scores,80,85);student(3)=struct(name,黄念中,scores,88,82);fori=1:length(student)%打印出每个学生的名字fprintf(student%g:%sn,i,student(i).name);end,student1:张庭硕student2:锺书蓉student3:黄念中,取得及改变字段数据,亦可用getfield及setfield来取得及改变一个字段的数据其指令使用格式如下:fieldValues=getfield(structureArray,arrayIndex,field,fieldIndex)newStructure=setfield(structureArray,arrayIndex,field,fieldIndex)输入下列表达式即可取得第二位学生的第一次小考成绩:score3=getfield(student,2,scores,1)上述MATLAB叙述可简化为score3=student(2).scores(1);若欲改变第二位学生的第三次小考成绩,可输入如下:student=setfield(student,2,scores,1,75);上述叙述亦可简化为student(2).scores(1)=75;,结构数组之范例八,范例13-8:deal01.mmyStruct=struct(name,Tim,Annie,age,10,13);myStruct.name=deal(Roger,Sue);fprintf(myStruct(1).name=%sn,myStruct(1).name);fprintf(myStruct(2).name=%sn,myStruct(2).name);myStruct(1).name=RogermyStruct(2).name=Sue,13-3取用及改变结构数组的字段,使用fieldnames指令可传回一结构数组的所有字段,例如:范例13-9:fieldNames01.mstudent=struct(name,Roland,scores,80,90);allFields=fieldnames(student)allfields=namescores其传回的结果是一个字符串异质数组(CellArrayofStrings),包含了student的所有字段。欲增加一个新的字段,直接将此栏加入于任一数组元素即可,结构数组之范例十,范例13-10:addField01.mclearstudent%清除student变数student=struct(name,Roland,scores,80,90);student(2).age=20;%加入新字段student(1)%显示student(1)student(2)%显示student(2)ans=name:Rolandscores:8090age:ans=name:scores:age:20由上述结果可看出,MATLAB会将此新字段加入其它元素,并设定其默认值为(空矩阵)。,结构数组之范例十一,范例13-11:rmField01.mstudent=struct(name,Roland,scores,80,90)student2=rmfield(student,scores)%删除scores字段student=name:Rolandscores:8090student2=name:Roland,13-4其它相关指令,我们可用isstruct指令来测试某个变量是否为结构数组,如下:范例13-12:isstruct01.ms=struct(name,Tim,Ann,scores,135,246);isstruct(s)ans=1isfield指令则可用于测试某结构数组是否含一特定字段,例如:范例13-13:isstruct02.ms=struct(name,Tim,Ann,scores,135,246);fprintf(isfield(s,name)=%dn,isfield(s,name);fprintf(isfield(s,height)=%dn,isfield(s,height);isfield(s,name)=1isfield(s,height)=0在上例中,因s并不包含“height”的字段,故回传数值0。,结构数组之范例十四,我们可用cell2struct指令来将异质数组转换成结构数组,例如:范例13-14:cell2struct01.mfields=name,age;values=Tim,9;Annie,6;s=cell2struct(values,fields,2);s(1)%印出第一笔资料s(2)%印出第二笔资料ans=name:Timage:9ans=name:Annieage:6在上例中,表达式s=cell2struct(values,fields,2)代表指令cell2struct将根据数组变量fields的数据为字段名称,并以values的第二个维度来对应字段名称fields,来产生一个结构数组s。,结构数组之范例十五,如果以values的第一个维度来对应字段名称fields,结果如下:范例13-15:cell2struct02.mfields=name,age;values=Tim,9;Annie,6;s=cell2struct(values,fields,1);s(1)%印出第一笔资料s(2)%印出第二笔资料ans=name:Timage:Annieans=name:9age:6,结构数组之范例十六,dir指令传回一结构数组,包含现在目录(或数据夹)下各种信息范例13-16:dir01.mdirinfo=dir(matlabroot)%字符串变量matlabroot代表MATLAB根目录dirinfo=19x1structarraywithfields:namedatebytesisdir由上可知,dirinfo为一结构数组,内含在MATLAB根目录下所含档案或其它目录的信息,即其名称(name),产生日期(date),大小(bytes),及是否为目录(isdir)等。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!