




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLAB程序设计语言,任课教师:李靖博士(讲师),Email:jli,研究方向:无线通信,2,Chapter6数据阵列类型与结构,多维阵列结构阵列单元阵列复杂阵列结构多维阵列、结构阵列和单元阵列函数,3,6.1多维阵列,多维阵列建立多维阵列多维阵列信息多维阵列的使用多维阵列计算多维阵列的数据组织,4,6.1.1-2多维阵列及其建立,多维阵列是二维矩阵的推广多维阵列使用3个以上的下标来访问多维阵列的建立:1.利用下标建立多维阵列;2.利用matlab函数产生多维阵列;3.利用cat函数建立多维阵列;4.用户自己编写M文件产生多维阵列。,5,利用下标建立多维阵列,例6.1有两个二维矩阵A和BA=B=123111213456141516可以很容易地构造一个三维矩阵C:C(:,:,1)=A;C(:,:,2)=B;给出:C(:,:,1)=C(:,:,2)=123111213456141516,6,利用matlab函数产生多维阵列,利用rand,randn,ones,zeros产生多维阵列,且在函数调用时指定每一维的尺寸。例6.2输入R=randn(3,4,2),给出:R(:,:,1)=0.4694-0.6275-0.20371.5929-0.90360.5354-2.05431.01840.03590.55290.1326-1.5804R(:,:,2)=-0.0787-1.23440.05580.3710-0.68170.2888-0.36790.7283-1.0246-0.4293-0.46502.1122另外,A=ones(4,3,2);B=repmat(3,3,2,2);,7,利用cat函数建立多维阵列,可将任何两个维数适当的阵列按指定维数进行连接,从而产生更高维阵列例6.3A=B=12563478,C=cat(1,A,B)C=12345678,C=cat(2,A,B)C=12563478,C=cat(3,A,B)C(:,:,1)=1234C(:,:,2)=5678,8,6.1.3多维阵列信息,ndims获得多维阵列维数size得到阵列各维的尺寸whos得到阵列的存储和格式,9,6.1.4多维阵列的使用(P269),下标访问技术阵列重新排列阵列的序列变换,10,6.1.5多维阵列计算,面向向量的函数:sum,mean,cross面向元素的函数:三角函数、指数函数等(可按对二维阵列的操作方式对多维阵列处理)算术、逻辑和关系运算符面向矩阵的函数:线性代数函数和矩阵函数,11,6.1.6多维阵列的数据组织,多维阵列可表示两类数据:表示成二维数据的平面或页,可将页当作矩阵处理;表示成多变量或多维数据。(例P272),12,6.2结构阵列,结构阵列由多个域构成,每个域可以存放各种类型的数据,例如,第一个域为用字符串表示的学生名字,第二个域为用标量表示的学生学号,第三个域为数值矩阵表示的学生成绩。,13,6.2.1建立结构阵列,利用赋值语句,对结构阵列的各个域进行赋值。例:=ZhangSan;student.number=001;student.score=817992859471;,14,6.2.1建立结构阵列,利用struct函数建立结构阵列例:student1=struct(name,ZhangSan,number,001,score,817992859471)例:ex1.m,15,6.2.2结构阵列数据的使用,在结构阵列中,利用结构名后的括号指示第n个结构元素,利用句点引出域名指示相应的域。str=student(1).name;可采用循环得到多个域的值。getfield,setfieldgetfield(student,2,name)student=setfield(student,2,number,003),16,6.2.3结构阵列应用于函数和操作符,例:mean(student(1).score)ans=83.6667,17,6.2.4结构阵列的数据组织(p277),平面组织:结构的每个域是整个图像平面优点:易扩展到多个平面或图像缺点:访问平面的子集比较麻烦元素对元素组织:优点:方便访问数据的子集缺点:要采用循环建立结构,且访问平面数据麻烦,18,6.2.5结构嵌套,结构嵌套:在结构阵列中,其域值可以是另一个已经定义过的结构例:n=cour1,cour2,cour3;r=886579;student=struct(name,ZhangSan,number,001,course,struct(name,n,score,r)执行后:student=name:ZhangSannumber:001course:1x3struct,19,6.3单元阵列,Matlab允许将不同类型的阵列组合成一个新的阵列,这一阵列称之为单元阵列。单元阵列中的每个单元可以是标量、向量、矩阵、多维阵列、字符阵列、结构阵列等。(P282图6.6),20,6.3.1建立单元阵列,建立单元阵列有两种方法:使用赋值语句使用cell函数预分配阵列,然后再对单元赋值,21,利用赋值语句建立单元阵列,使用花括号对单元阵列进行赋值,花括号可以用在赋值语句的左边,也可以用在右边。A1,1=123;456;789;或A(1,1)=123;456;789;A1,2=Tom;或A(1,2)=Tom;,22,利用cell函数定义单元阵列,使用cell函数预分配阵列,然后再对单元赋值B=cell(2,3)B=B(1,2)=1:4,23,6.3.2单元阵列数据的使用,利用单元阵列的下标可访问单元阵列元素A1,1=123;456;789;A1,2=Tom;A2,1=3+7*i;A2,2=-pi:pi/10:pi;c=A2,1c=3.0000+7.0000ic=A1,1(2,3)c=6,24,6.3.2单元阵列数据的使用,从已定义单元阵列中取一部分构成新单元阵列A2,3=helloA=3x3doubleTom3.0000+7.0000i1x21doublehelloB=A(1:2,2:3)B=Tom1x21doublehello删除元素A2,3=%删除A中的(2,3)的元素A(:,3)=%删除A中的第三列元素,25,6.3.3利用单元阵列取代变量列表,在花括号中采用”:”操作符指示多个单元,则相当于指示多个独立的单元内容A1:3%单元阵列A中第1个到第3个元素ans=123456789ans=3.0000+7.0000ians=TomD1:2=eig(B)%求矩阵的特征向量和特征值,26,6.3.4单元阵列应用于函数和操作符,利用下标将函数和操作符应用于单元阵列m=prod(A1,1)m=2880162l=(abs(A1,1)=3)l=001111000,27,6.3.5单元阵列的数据组织,单元阵列对组织具有不同尺寸或类型的数据是非常有用的,它比结构更具包容性,可应用于:(p287)利用一条语句访问多个数据域利用逗号间隔的变量表访问数据子集不具备固定的域名经常从结构中删除域名,28,6.3.6嵌套单元阵列,一个单元阵列中可以包含另一个单元阵列,甚至可包含单元阵列的阵列,称之为单元阵列的嵌套建立单元阵列的嵌套:嵌套的花括号、cell函数、赋值语句。例6.4利用嵌套的花括号建立嵌套单元阵列例6.5利用cell函数建立嵌套单元阵列,29,6.3.7单元阵列与数值阵列之间的变换,采用循环程序实现转换,30,6.4复杂阵列结构,多维单元阵列多维结构阵列结构的单元阵列,31,6.4.1多维单元阵列,借助cat函数连接产生A1,1=123;456;789;A1,2=Tom;A2,1=3+7*i;A2,2=-pi:pi/10:pi;B1,1=hello;B1,2=6;B2,1=1:3;B2,2=24;,32,6.4.1多维单元阵列,C=cat(3,A,B)C(:,:,1)=3x3doubleTom3.0000+7.0000i1x21doubleC(:,:,2)=hello61x3double1x2double,33,6.4.2多维结构阵列,直接赋值或cat函数产生例:student(1,1,1).name=Tom;student(1,1,1).number=001;student(1,1,1).score=817992859471;student(1,1,2).name=Joe;student(1,1,2).number=003;student(1,1,2).score=647769847690;,34,6.4.2多维结构阵列,student=1x1x2structarraywithfields:namenumberscoreavg=sum(student(1,1,2).score)/6avg=76.6667,35,6.4.3结构的单元阵列,利用单元阵列可将具有不同域结构的结构阵列存储在一起。(P293图6.10),36,6.5多维阵列、结构阵列和单元阵列函数,多维阵列函数结构阵列函数单元阵列函数,37,6.5.1多维阵列函数,catndimsndgridpermuteipermuteshiftdimsqueezeflipdim,38,cat,功能:连接阵列格式:C=cat(dim,A,B)C=cat(dim,A1,A2,A3,A4.)说明:将输入阵列A,B或A1,A2,A3,A4沿着dim维连接成C阵列。cat(2,A,B)=A,Bcat(1,A,B)=A;B,39,ndims,功能:求阵列维数格式:n=ndims(A)说明:ndims(x)=length(size(x).,40,ndgrid,功能:为多维函数和内插产生阵列格式:X1,X2,X3,.=ndgrid(x1,x2,x3,.)X1,X2,.=ndgrid(x)说明:可将由向量x1,x2,x3,指定的域变换成阵列X1,X2,X3,.,用于多变量函数的计算和多维内插。例6.6,41,permute,功能:多维阵列的序列变换(重新排列)格式:B=permute(A,order)说明:对阵列A按order指定的格式重新排列。对阵列A,permute(A,21)等价于A。例6.7,42,ipermute,功能:多维阵列的逆序列变换格式:A=ipermute(B,order)说明:permute函数逆变换。例6.8,43,shiftdim,功能:维数移位格式:B=shiftdim(X,n)B,nshifts=shiftdim(X)说明:当n为正数时,shiftdim(X,n)将X阵列的维数向左移动n位,最后维回绕至第一维;当n维负数时,将X阵列的维数向右移动n维,并在首维上补零成单点维.B,nshifts=shiftdim(X)可以删去首维开始的单点维。例6.9,44,squeeze,功能:删除单点维格式:B=squeeze(A)说明:删除A阵列中的单点维例6.10,45,flipdim,功能:阵列沿着指定维翻转格式:B=flipdim(A,dim)说明:沿着dim维翻转flipdim(A,1)等同于flipud(A)flipdim(A,2)等同于fliplr(A)例6.11,46,6.5.2结构阵列函数,structfieldnamesgetfieldsetfieldemfieldisfieldisstruct,47,struct,功能:建立结构阵列格式:s=struct(field1,values1,field2,values2,.)说明:s=struct(field1,values1,field2,values2,.)可建立具有指定域名及其值的结构阵列,值阵列values1,values2,必须是相同尺寸的单元阵列或标量单元,值阵列中的元素相应地放入结构阵列中。例:6.12,48,fieldnames,功能:获取结构名格式:f=fieldnames(s)说明:names=fieldnames(s)可得到结构阵列s的域名,其结构names为一单位阵列。例6.13,49,getfield,功能:获取结构阵列的域值。格式:f=getfield(s,field)f=getfield(s,i,j,field,k)说明:f=getfield(s,field)可获得结构阵列s中指定域的域值,这实际上等效于fs.field。f=getfield(s,i,j,field,k)可获得结构阵列s中指定域的域值,这等价于fs(i,j).field(k)。例6.14,50,setfield,功能:设置结构阵列的域值格式:s=setfield(s,field,v)s=setfield(s,i,j,field,k,v)说明:s=setfield(s,field,v)可将s中指定域的内容设置成v,这等效于s.field=v。s=setfield(s,i,j,field,k,v)也可将s中指定域的内容设置成v,这等效于s(i,j).field(k)v例6.15,51,rmfield,功能:删除结构阵列中的域格式:s=rmfield(s,field)s=rmfield(s,FIELDS)说明:s=rmfield(s,field)可从结构阵列s中删除指定的域;s=rmfield(s,FIELDS)可一次删除s中的多个域,其中FIELDS为指定域名的字符阵列或字符串的单元阵列。,52,isfield,功能:检测到结构阵列的域名时为逻辑真格式:tf=isfield(A,field)说明:tf=isfield(A,field)中,当指定的field是s的域名时,k为逻辑真(其值为1)。例6.16,53,isstruct,功能:检测到结构阵列时为逻辑真。格式:tf=isstruct(A)说明:tf=isstruct(A)中,当s为结构阵列时,k为逻辑真。,54,6.5.3单元阵列函数,cellcelldispcellplotnum2cellstruct2celliscellcellstrdeal,55,cell,功能:建立单元阵列格式:c=cell(n)c=cell(m,n)orc=cell(mn)c=cell(m,n,p,.)orc=cell(mnp.)c=cell(size(A)说明:c=cell(n)可产生nn的空单元阵列,当n为非标量时,MATLAB给出出错信息。c=cell(m,n)和c=cell(mn)可产生mn的空单元阵列,变量m,n也必须为标量。c=cell(m,n,p,.)和c=cell(mnp.)可产生mnp维的空单元阵列。c=cell(size(A)可产生与A同维的空单元阵列。,56,celldisp,功能:显示单元阵列内容格式:celldisp(C)说明:celldisp(C)可显示出单元阵列c的内容。例6.18,57,cellplot,功能:以图形方式显示出单元阵列的结构格式:cellplot(c)cellplot(c,legend)handles=cellplot(.)说明:cellplot(c)可以以图形形式表示c的内容,填充了颜色的方块用于表示阵列和向量的元素,标量和短的文本字串则会直接进行显示。cellplot(c,legend)中,还可以在单元阵列图的右边,给出图例文本。handles=cellplot(c),可在画出单元阵列图之外,还得得到了图形句柄。,58,num2cell,功能:数值阵列变换单元阵列。格式:c=num2cell(A)c=num2cell(A,dims)说明:c=num2cell(A)可将阵列A的元素放入相应单元阵列c的位置,c的尺寸与A的相同。c=num2cell(A,dims)可将阵列A放入单元阵列c,并将指定维dim放入独立的单元。例6.19,59,cell2struct,功能:单元阵列变换成结构阵列格式:s=cell2struct(c,fields,dim)说明:s=cell2struct(c,fields,dim)可将单元阵列的指定维转变成域名维fields的结构s,因此c在dim维的长度必须与域名的数目相同。变量fields可以是字符阵列,也可以是字符的单元阵列。例6.20,60,struct2cell,功能:结构阵列变换成单元阵列格式:c=struct2cell(s)说明:将mn结构s(有p个域)变换成pmn单元阵列c。若s多维,则c具有尺寸psize(s)例6.21,61,iscell,功能:检测到单元阵列时为逻辑真格式:tf=iscell(A)说明:当A为单元阵列时,tf为逻辑真。,62,cellstr,功能:从字符阵列中建立单元阵列格式:c=cellstr(S)说明:将字符阵列s中的每一行放入c的独立单元中,从而构成单元阵列c。例6.22,63,deal,功能:输入分配给输出格式:Y1,Y2,Y3,.=deal(X)Y1,Y2,Y3,.=deal(X1,X2,X3,.)说明:Y1,Y2,Y3,.=deal(X)将单输入分配为每一个输出,即Y1=X,Y2=X,Y3=X,Y1,Y2,Y3,.=deal(X1,X2,X3,.)等同于Y1=X1,Y2=X2,Y3=X3,例6.23,Theend,65,例6.4利用嵌套的花括号建立嵌套单元阵列,A(1,1)=magic(5)A(1,2)=layer212;34;-pipilayer31;AA=5x5double2x2cellA1,2ans=layer22x2double1x2double1x2cellA1,22,2ans=layer31,返回,66,例6.5利用cell函数建立嵌套单元阵列,A=cell(1,2);A(1,1)=magic(4);A(1,2)=cell(2,2);A1,2(1,1)=layer2;A1,2(1,2)=12;34;A1,2(2,1)=-pipi;A1,2(2,2)=layer31;结果同例6.4,返回,67,例6.6ndgrid,例6.6计算函数在,上的值。X1,X2=ndgrid(-2:.4:2,-2:.4:2);Z=X1.*exp(-X1.2-X2.2);mesh(Z);,返回,68,例6.7permute,例6.7.1A=12;34;permute(A,21)ans=1324例6.7.2X=rand(12,13,14);Y=permute(X,231);size(Y)ans=131412,返回,69,例6.8ipermute,a=cat(3,eye(2),2*eye(2),3*eye(2)a(:,:,1)=a(:,:,2)=a(:,:,3)=102030010203B=permute(a,321);C=ipermute(B,321);isequal(a,C)ans=1,返回,70,例6.9shiftdim,例6.9a=rand(1,1,3,1,2);b,n=shiftdim(a);%b是312维且n=2.c=shiftdim(b,-n);%c=a.d=shiftdim(a,3);%d是12113维.,返回,71,例6.10squeeze,Y=rand(2,1,3);Y=Y(:,:,1)=Y(:,:,2)=Y(:,:,3)=0.51940.03460.52970.83100.05350.6711Z=squeeze(Y);Z=0.51940.03460.52970.83100.05350.6711,返回,72,例6.11flipdim,A=142536flipdim(A,1)=362514,返回,73,例6.12struct,s=struct(type,big,little,color,red,x,34)这时可得到一个结构阵列Ss=1x2structarraywithfields:typecolorx这说明S阵列有三个域(type,color,x),有两个结构元素,可输入:s(1)s(2)ans=ans=type:bigtype:littlecolor:redcolor:redx:3x:4,返回,74,例6.13fieldnames,mystr(1,1).name=alice;mystr(1,1).ID=0;mystr(2,1).name=gertrude;mystr(2,1).ID=1;n=fieldnames(mystr)n=nameID,返回,75,例6.14getfield,给定结构mystr(1,1).name=alice;mystr(1,1).ID=0;mystr(2,1).name=gertrude;mystr(2,1).ID=1然后输入:f=getfield(mystr,2,1,name)f=gertrude为列出name域的所有内容,可采用循环程序:fork=1:2namek=getfield(mystr,k,1,name);endnamename=alicegertrude,返回,76,例6.15setfield,给定结构:mystr(1,1).name=alice;mystr(1,1).ID=0;mystr(2,1).name=gertrude;mystr(2,1).ID=1;然后输入:mystr=setfield(mystr,2,1,name,ted);mystr(2,1).nameans=ted,返回,77,例6.16isfield,给定结构=JohnDoe;patient.billing=127.00;patient.test=797573;180178177.5;220210205;然后isfield(patient,billing)ans=1,返回,78,例6.18celldisp,C=12Tony3+4i;12;34-5abc;celldisp(C)C1,1=12C2,1=1234C1,2=TonyC2,2=-5C1,3=3.0000+4.0000iC2,3=abc,返回,79,例6.19num2cel,A=fix(20*rand(4,4)A=191
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食品长期供应合同
- 购销合同(长期供货购销合同发供货通知书)2篇
- 甘肃工业照明工程方案(3篇)
- 理疗学课件教学课件
- 佛山酒店装修工程方案(3篇)
- 安全文明生产培训材料课件
- 电梯工程审价方案范文(3篇)
- 安全整改培训计划课件
- 浦北县顺源门窗制造有限公司门窗生产线项目环评报告
- 猫咪课件教学课件
- 起重机械定期检查与维护方案
- 2025年新《公司法》知识竞赛题库(附含答案)
- 动物样品采集培训课件
- 八年级心理健康体验式教学计划
- 二手房资金监管协议书
- 甘肃省会宁县2025年上半年公开招聘辅警试题含答案分析
- 2025年太阳能海水淡化项目经济效益评估报告
- 2025年机关事业单位工人招聘《机动车驾驶员》技师考试题库与答案
- 2025年物资保管岗位招聘面试实战指南及模拟题解析
- 2025江苏南京农业大学新校区建设指挥部、基本建设处人员招聘10人考试模拟试题及答案解析
- 支教面试课件内容
评论
0/150
提交评论