Matlab数据结构之单元数组(cellarray)与结构体(structures)中国科技大学信息学院陆伟luwei@ustc.edu.cnMatlab编程及其应用单元数组(cellarray)将不同类型的、相关的数据集成在一个变量中。该变量称为单元数组,其中的每个元素称为单元(cell)。cell可以是任何数据类型:字符串、双精度数组、其他单元数组。不同的cell可以包含不同的数据类型。单元数组(cellarray)单元数组(cellarray)用途:使得大量的相关数据的处理与引用变得简单而方便。比如:一段处理的语音信号,除了语音数据外,还希望记录相关信息,如说话人;性别;采样率;录制时间;GUI、Simulink程序中数据的传递创建单元数组创建一个2*2的单元数组:方法一:大括号在右边:A(1,1)={[123;456]};A(1,2)={3+4i};A(2,1)={‘helloworld!’};A(2,2)={1:10};创建单元数组方法二:大括号在左边:A{1,1}=[123;456];A{1,2}=3+4i;A{2,1}=‘helloworld!’;A{2,2}=1:10;创建单元数组方法三:直接赋值B={[12],’张三’,2+3i,5};C={[1:10],‘USTC’;4-2j,2};创建单元数组方法四:首先生成一个空单元数组,再添加数据。C=cell(2,3)C(1,1)=‘thisiswrong’;C(1,1)={‘thisisright’};C{2,2}=‘thisworkstoo’;单元数组的内容显示AA=[2x3double][3.0000+4.0000i]'hello,world!'[1x10double]单元数组的内容显示(celldisp)celldisp(A)A{1,1}=123456A{2,1}=hello,world!A{1,2}=3.0000+4.0000iA{2,2}=12345678910单元数组的内容显示A{:}ans=123456ans=hello,world!ans=3.0000+4.0000ians=12345678910单元数组的内容显示cellplot(A)3+4ihello,world!单元内容获取x=A(2,2)x=[1x10double]x=A{2,2}x=12345678910单元内容删除A(2,1)=[]???Anullassignmentcanhaveonlyonenon-colonindex.A{2,1}=[]A=[2x3double][3.0000+4.0000i][][1x10double]结构体(structures)类似与单元数组,将不同类型的、相关的数据集成在一个变量中;结构体中每个元素称为字段(field);每个字段(field)可以是任何数据类型:字符串、双精度数组、其他单元数组。不同字段可以包含不同的数据类型。创建结构体创建一个包含学生个人资料的结构体student,可能的字段有:name、id、scores等。student.name=‘小明’;student.id=‘PB1234567’;student.scores=[98,92,90];创建结构体student=name:'小明'id:'PB1234567'scores:[989290]要加入第二个学生的资料,可以:student(2).name=‘小刚’;student(2).id=‘PB2345678’;student(2).scores=[75,100,86];创建结构体student=1x2structarraywithfields:nameidscores结构体创建结构体变量circle:circle.radius=2.5;circle.center=[0,1];circle.linestyle='--';circle.color='red'circle=radius:2.5000center:[01]linestyle:'--'color:'red'结构体size(circle)ans=11whosNameSizeBytesClassAttributescircle1x1530struct结构体希望再加入一个圆:circle(2).radius=3.4;circle(2).color='green';circle(2).linestyle=':';circle(2).center=[2.3-1.2]circle=1x2structarraywithfields:radiuscenterlinestylecolor字段内容的获取rad2=circle(2).radiusrad2=3.4000area1=pi*circle(1).radius^2area1=19.6350