版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MATLABProgrammingandEngineeringApplicationMATLAB程序设计与工程应用本书知识结构第6章MATLAB中的高级数据类型6.1元胞数组了解元胞数组的概念、作用及其与普通数组的区别,掌握元胞数组的创建及访问方法,了解元胞数组在函数定义中的应用。6.2结构体数组了解结构体和结构体数组的概念和基本组成,掌握结构体数组的创建和访问方法,了解嵌套结构体的概念及应用,掌握结构体数组作为函数参数的使用方法。6.3表格掌握表格的基本结构组成,掌握表格的创建、查看和数据访问的常用方法,掌握表格数据的常见处理方法。6.1元胞数组6.1.1元胞数组的创建当要将数据放入元胞数组中时,只需要将这些数据用逗号分隔,并依次放在一对大括号中。这里通过一个例子体会元胞数组的概念及其与普通数组的区别。用如下命令分别创建一个最简单的元胞数组cellArr和一个普通的数组arr:>>cellArr={1,2,3}cellArr=1×3cell数组{[1]}{[2]}{[3]}>>arr=[1,2,3]arr=1236.1元胞数组由此可见,创建普通数组时,是将数组中的各元素依次放在一对中括号中,而创建元胞数组时,是将各元素依次放在一对大括号中,放在大括号中的每个元素称为元胞(Cell)。在命令行窗口显示的执行结果中,元胞数组中的每个元胞分别用一对大括号包围。对普通的数组,直接依次列出其中的各元素。利用whos命令查看所创建的cellArr和arr变量的属性,结果如下:>>whosNameSizeBytes
ClassAttributesarr
1x324
doublecellArr
1x3336
cell其中cellArr的类型属性(Class)为cell,说明这是一个1×3元胞数组。6.1元胞数组元胞数组的创建
元胞数组更一般的形式是,每个元胞都可能是各不相同的数据类型。例如,如下命令创建了一个元胞数组myCell:>>myCell={1,2,3;'text',[11;22;33],{112233}}myCell=2×3cell数组{[1]}{[2]}{[3]}{'text'}{3×1double}{1×3cell}需要注意的是,与普通数组一样,元胞数组的每一行也必须具有相同的列数。6.1元胞数组cell函数调用cell函数首先创建一个空的元胞数组,之后即可向其中添加元胞。该函数有以下几种基本调用格式:C
=cell(n)
C
=cell(sz1,...,szN)
C
=cell(sz)
其中,参数n和sz1、sz2、…、szN都是整型参数;sz为一个行向量,其中的每个参数也是整数。上述3种调用格式分别返回一个n×n、sz1×...×szN
和sz(1)×...×sz(N)
元胞数组。例如,cell(2,3)和cell([23])都返回一个2×3元胞数组。6.1元胞数组6.1.2元胞数组中数据的访问对元胞数组,可以有两种基本的访问操作,即元胞索引和内容索引访问。元胞索引指的是元胞数组中的各元素,每个元素是一个元胞。元胞中保存的具体数据称为内容索引。上述两种索引都可以像普通数组一样通过下标进行访问。但是,元胞索引的下标必须放在小括号中,内容索引的下标必须放在大括号中。6.1元胞数组元胞索引的访问小括号中的索引下标用于访问元胞索引,返回结果是一个元胞(11元胞数组),或者多个元胞构成的元胞数组。例如,用如下命令创建一个2×3元胞数组C:>>C={'one','two','three';1,2,3}C=2×3cell数组{'one'}{'two'}{'three'}{[1]}{[2]}{[3]}则如下命令及其结果分别为:>>C1=C(1,2)
%元胞索引,返回一个元胞C1=1×1cell数组{'two'}>>C2=C(1:2,1:2) %元胞索引,访问多个元胞,得到一个新的元胞数组C2=2×2cell数组{'one'}{'two'}{[1]}{[2]}6.1元胞数组内容索引的访问通过将索引下标放在大括号中,可以访问元胞数组中指定元胞的内容,即元胞中存储的数字、文本或其他数据。例如,对前面创建的元胞数组C,如下命令可以访问最后一个元胞中存储的数据:>>C{1,2}ans='two'得到的结果是一个字符向量。注意到显示的结果中没有加大括号,说明是元胞中保存的具体数据(内容索引),而不是元胞本身(元胞索引)。6.1元胞数组利用这种方法还可以同时访问一个元胞数组中多个元胞的数据,返回的各数据以逗号分隔,分别返回给不同的变量。例如,对前面创建的2×3元胞数组C,如下命令返回其中第2列的两个元胞数据,并分别赋给变量a和b:>>[a,b]=C{:,2}a='two'b=2需要注意的是,如果每个元胞包含不同类型的数据,则返回的这些数据不能同时分配给一个变量,或者赋给某个普通数组。当返回的每个元胞数据都具有相同的类型时,可以将其用[]指定放到一个数组变量中。例如,>>a=[C{2,1:2}] a=1×3126.1元胞数组6.1.3字符向量元胞数组前面已经说过,如果将多个字符向量放在一对中括号中,是将这些字符向量拼起来构成一个新的字符向量。如果多个字符向量分别代表不同的含义(例如分别作为多个文件的文件名),则可以将其放在一对大括号中,作为一个元胞数组中的元素,此时各字符向量不会合并连接。字符向量元胞数组的创建如果一个元胞数组的元素均为字符向量,则称为字符向量元胞数组。将用单引号括起来的每个字符向量分别用逗号、空格或者分号分隔,再用大括号括起来,即可创建字符向量元胞数组。6.1元胞数组例如,如下命令创建一个字符向量元胞数组:>>chrArr={'张三','李四','Alice'}chrArr=1×3cell数组{'张三'}{'李四'}{'Alice'}在得到的结果中,每个字符向量都用大括号括起来,表示一个元胞。比较如下命令及其结果:>>chrArr1=['张三','李四','Alice']chrArr1='张三李四Alice'得到的charArr1为一个新的字符向量。6.1元胞数组元胞数组维数的获取前面介绍的内置函数strlength用于获取用双引号括起来的字符串的长度。对于字符向量元胞数组,该函数用于获取元胞数组中每个元胞字符向量的长度,返回结果是一个数值型数组,其维数等于元胞数组的维数。例如,>>chrArr={'张三','李四','Alice'}>>strlength(chrArr)ans=225注意:对字符向量元胞数组,length函数返回的是元胞数组中元胞的个数,即字符向量的个数。比较:>>length(chrArr)ans=36.1元胞数组字符向量的比较前面介绍的strcmp和strcmpi等函数用于比较字符向量、字符串和字符串数组,也可以用于对两个字符向量元胞数组进行比较。参加比较的可以是一个字符向量和一个字符向量元胞数组,也可以是两个字符向量元胞数组。如果参加比较的是两个字符向量元胞数组,则两个数组的大小必须相同。此时,返回结果是一个大小等于元胞数组大小的逻辑型数组。6.1元胞数组例如,>>s1='upon';>>s2={'Once','upon';'a','time'}; %字符向量与字符向量元胞数组进行比较>>tf=strcmp(s1,s2)tf=2x2logical数组 %返回大小与元胞数组相同的逻辑型数组01006.1元胞数组6.1.4元胞数组与函数的可变个数参数元胞数组是MATLAB中一种重要的数据类型,具有很强的灵活性,利用这一特点可以实现高级功能和操作。例如,利用元胞数组可以存储任意类型和任意个数的数据,如果将元胞数组作为函数的参数,则可以允许函数接收不同类型和个数的参数,并据此实现不同的功能。可变个数参数的定义在定义函数时,如果用varargin和varargout关键字作为函数的输入和输出参数,则表示该函数可以接收不同个数的参数。此外,在自定义的函数体中,还可以通过nargin和nargout关键字获取调用自定义函数时所给定的输入输出参数个数。6.1元胞数组关键字varargin的全称是Variable-lengthinputargumentlist(可变长度输入参数列表),varargout的全称是Variable-lengthoutputargumentlist(可变长度输出参数列表)。这两个关键字通常放在函数声明语句中,分别作为函数的输入参数和输出参数,从而是的函数能够接收任意数量的输入参数,返回需要个数的输出参数。具体使用时,将这两个关键字分别放在函数输入参数和输出参数列表的最后。在调用执行函数时,varargin和varargout都分别是一个1N的元胞数组,其中N是函数接收到的输入参数个数,但不包括在函数中明确声明的其他参数。如果除了这些明确声明的参数以外,函数没有接收或返回任何其他参数,则varargin和varargin为空的元胞数组。6.1元胞数组例如,定义如下函数:functionmyFun(varargin)celldisp(varargin)end如下语句调用上述函数:myFun(ones(3),'sometext',pi)其中3个输入参数将赋给元胞数组变量varargin,再执行函数体中的celldisp()函数,显示出其中3个元胞的内容:varargin{1}=111111111varargin{2}=sometextvarargin{3}=3.14166.1元胞数组参数个数的检查和获取如果在函数定义中,参数的个数是确定的,则MATLAB能够自动检查函数的入口参数个数是否正确。当发现调用时所给实参个数与函数定义中规定的形参个数不一致时,会自动发出提示。例如,假设有如下函数定义:function[x,y]=myFun(a,b,c)该函数需要3个输入参数,有2个输出参数。如果用如下语句调用上述函数:[X,Y]=myFun(1,2,3,4)由于给定的实在参数有4个,因此执行时,将显示如下错误提示:错误使用myFun输入参数太多。6.1元胞数组在MATLAB程序中,函数的入口参数可以有可选位置参数、重复参数以及不同个数的名值对参数,同一个函数也可以根据实现的具体功能返回不同个数的出口参数等,这就需要在函数体中自动确定参数的个数。这是通过调用MATLAB种提供的nargin和nargout两个专用内置函数实现的。nargin和nargout函数分别返回的是调用时主程序向函数传递的入口和出口参数的个数,这两个函数只能用在自己定义的函数中,不能用在主程序中。注意nargin函数返回的入口参数个数中,包括位置参数、可选位置参数和重复参数,但不包括名值对参数。6.1元胞数组实例6-1函数的可变个数参数16.1元胞数组实例6-2函数的可变个数参数26.1元胞数组实例6-3参数个数的检查6.1元胞数组实例6-4输出参数个数的获取创建一个函数求入口向量参数中所有元素的累加和,如果有两个出口参数,则同时返回入口向量中所有元素的平均值。6.2结构体数组结构体数组(StructureArray)中的每个元素是一个结构体(Structure),每个结构体由多个字段或者域(Field)构成,每个字段有一个字段名和字段值,各字段的值可以是不同类型的数据。因此与元胞数组类似,结构体数组是一种可以存储多个不同类型数据的数据容器。结构体数组的基本组成可以用图6-1表示。与其他数组类似,结构体数组可以具有任意维度,同时具有以下属性:(1)结构体数组中的所有元素(结构体)都具有相同名称和个数的字段;(2)同一个元素的各字段值可以具有不同的数据类型;(3)不同元素中的同名字段可以包含不同类型或大小的数据。6.2结构体数组6.2结构体数组6.2.1结构体数组的创建结构体标量的创建
结构体数组中的每个元素都是一个结构体,单独的一个结构体是一个标量。创建结构体标量时,只需要依次给定该元素的各字段名,并为其赋值即可。具体格式如下:
结构体名.字段名=字段值例如,如下命令:>>="张三";>>student.number=1234;>>student.score=[926574];结构体。6.2结构体数组创建了一个名为student结构体,每个结构体包含的字段有:name(姓名)、number(学号)、score(3次测验成绩),并且直接用赋值语句为3个字段赋值。执行上述命令后,在命令行窗口用whos命令可以查看该结构体的相关属性:>>whosNameSizeBytesClassAttributesstudent1x1686struct其中的类型属性(Class)为struct,说明这是一个结构体。6.2结构体数组结构体数组的创建
由多个具有相同字段的结构体可以构成一个结构体数组,其中的每个元素都是结构体。要创建这样的结构体数组,对数组中的每个结构体分别设置字段值即可。在程序中,首先用索引下标访问结构体数组中指定的结构体元素,然后利用前面创建结构体相同的方法为该元素设置各字段值。
例如,如下语句创建了结构体数组s:
s(1).name="张三";s(1).number=1234;s(1).score=[926574];
s(2).name="李四";s(1).number=1235;s(1).score=[608590];
其中有两个元素,每个元素包括name、number和score三个字段。
6.2结构体数组struct()函数
除了上述方法外,还可以调用内置函数struct创建结构体和结构体数组,该函数的基本调用格式如下:s=
struct(field1,value1,...,fieldN,valueN)
其中field1、field2、…为字段名,value1、value2、…为各字段的取值。
在具体调用上述函数时,可以创建一个结构体标量或结构体数组。如果入口参数这三所有字段名和字段值都不是元胞数组,则返回一个结构体或者结构体数组中的一个元素。6.2结构体数组例如,如下命令及其执行结果为:>>s=struct('x','a','y',[123])创建了一个结构体s,其中包括两个x和y两个字段,第2和第4个参数分别为两个字段的值。命令执行结果如下:s=包含以下字段的struct:x:'a'y:[123]6.2结构体数组如果用这种方法创建的多个结构体具有相同的字段,则这些结构体可以构成一个结构体数组。例如,用如下两条命令>>s(1)=struct('x','a','y',[123]);>>s(2)=struct('x','b','y',[456]);分别创建了一个结构体s(1)和s(2),这两个结构体分别作为两个元素,构成结构体数组s。6.2结构体数组6.2.2结构体数组的访问和操作结构体数组的查看
用前面介绍的方法创建的结构体标量或者结构体数组,可以调用disp函数查看。例如,对前面创建的student结构体标量,用如下命令>>disp(student)查看,得到如下结果:
name:"张三"number:1234score:[926574]注意:对于结构体标量,调用disp函数可以显示所有的字段名和字段值。对于结构体数组,只显示字段名,不显示字段值。如果希望同时显示出字段值,需要分别对其中的各元素调用disp函数进行。6.2结构体数组除了上述方法外,也可以通过变量子窗口观察所创建的结构体数组。具体操作方法是:在工作区子窗口中双击结构体数组变量名,即可打开变量子窗口,在其中以表格的形式显示结构体数组。双击6.2结构体数组字段名和字段值的访问在程序中,调用内置函数fieldnames可以获取结构体数组的字段名,返回一个由所有字段名构成的元胞数组。例如,对例6-5中创建的结构体数组sarr,如下命令>>fd=fieldnames(sarr)返回元胞数组列向量fd,结果如下:fd=3×1cell数组{'f1'}{'f2'}{'f3'}6.2结构体数组之后即可采用内容索引方法获得用字符向量表示的各字段名称。例如,如下命令>>fd{1}获取第一个字段的字段名,结果如下:ans='f1'而如下命令可以获取结构体中字段的个数:>>length(fd)ans=36.2结构体数组访问结构体中指定字段值的基本方法是用小圆点运算符实现,也可以调用内置函数getfield和setfield实现。例如,如下两条命令:>>student.number>>getfield(student,"number")都是访问其中的number字段,得到如下结果:ans=12346.2结构体数组而如下命令>>setfield(student,"number",1235)将结构体student中的number字段值修改为1235,执行结果如下:ans=包含以下字段的struct:name:"张三"number:1235score:[926574]对于含有多个元素的结构体数组,调用getfield和setfield函数时,还可以指定元素下标。例如,如下命令:>>getfield(sarr,{1},'f2')访问sarr结构体数组中第一个元素的f2字段,得到如下结果:ans='a'需要注意的是,下标必须放在一对大括号中。6.2结构体数组而如下命令>>setfield(student,"number",1235)将结构体student中的number字段值修改为1235,执行结果如下:ans=包含以下字段的struct:name:"张三"number:1235score:[926574]对于含有多个元素的结构体数组,调用getfield和setfield函数时,还可以指定元素下标。例如,如下命令:>>getfield(sarr,{1},'f2')访问sarr结构体数组中第一个元素的f2字段,得到如下结果:ans='a'需要注意的是,下标必须放在一对大括号中。6.2结构体数组结构体数组元素的遍历对结构体数组,根据程序的需要,可能一次访问一个元素的多个字段值,也可能一次访问多个元素的同一个字段值,还可能一次访问多个元素的多个字段值甚至是整个结构体数组。作为例子,首先用如下命令创建结构体stu:>>stu=struct('name',{'张三','李四','王五'},...'ID',{'001','002','003'},...'score',{90,80,'缺考'})6.2结构体数组在变量观察子窗口观察得到的结构体stu如图6-3所示。该结构体数组中有3个元素,每个元素有3个字段。3个元素的字段name和ID的取值都为字符向量,而第1和2个元素中字段score的取值为数值型数据,第3个元素的score字段取值为字符向量。6.2结构体数组(1)多个元素同一个字段值的访问为了访问结构体数组stu中多个元素的同一个字段,基本的方法是在结构体数组名后用小圆点运算符直接跟上字段名。例如score字段,可以用如下命令:>>stu.score此时在命令行窗口将依次返回各元素的score字段值,得到如下结果:ans=90ans=80ans='缺考'需要注意的是,如果在上述命令中给定了返回值变量,并且是一个标量,则只返回结构体数组中第一个元素的score值。为了同时返回所有元素的字段值,可以设置与元素个数相同的返回值变量列表。6.2结构体数组(2)同一个元素多个字段值的访问在这种情况下,首先用普通数组的方法,利用索引下标指定数组中需要访问的元素,之后用小圆点运算符依次访问指定字段即可。由于一般情况下各字段值的数据类型不相同,因此一般将返回结果放到元胞数组中。例如,要显示结构体stu中第一个学生的所有字段信息,可以用如下命令:>>s1={stu(1).name,stu(1).ID,stu(1).score}s1=1×3cell数组{'张三'}{'001'}{[90]}6.2结构体数组(3)结构体数组元素的遍历所谓遍历,是依次访问结构体数组中所有元素的所有字段,或者多个元素的若干个字段值。为实现遍历,只需要将前述两种情况综合应用,并进行循环访问即可。例如,将stu结构体中所有学生的所有信息以列表的形式显示,可以用如下程序段实现:n=length(stu); %获取结构体数组中元素的个数fprintf('姓名学号成绩\n');fprintf('------------------\n');fori=1:nfprintf('%s%s%3d\n',stu(i).name,stu(i).ID,stu(i).score);end6.2结构体数组实例6-6结构体数组的创建与访问创建一个结构体数组stu,其中的字段name、ID、score和avg分别用于存放各学生的姓名、学号、4门课程的测验成绩和平均成绩。之后实现如下功能:(1)计算每个学生4门课程的平均成绩,并保存到结构体中;(2)求所有学生的平均成绩avg0。在程序中,设置name字段的值是1´3元胞数组行向量,因此得到的stu也是1´3结构体数组,其中的每个元素有4个字段,字段名分别为name、ID、score和avg。字段avg的值设为空数组,在程序后面通过for循环计算得到各学生的平均成绩后,再作为字段值保存到结构体中。6.2结构体数组6.2结构体数组由于字段score中每个学生4门课程的成绩是普通的数值型数组,因此在for循环中,stu(i).score返回的是一个普通的数值型数组,调用内置函数mean即可求得到数组中4门课程的平均值。在程序的最后,表达式[stu.avg]返回的也是一个数值型数组,因此也是通过内置函数mean()求得3个学生的平均成绩。程序运行后,在变量观察窗口和命令行窗口显示的结果如图6-4所示。6.2结构体数组字段的增加和删除要在已有的结构体数组中所增加一个字段,直接为数组中某个指定的元素对应该字段赋值即可。例如,要向实例6-6中所创建的结构体数组stu中增加一个字段total,可以用如下命令:>>stu(1).total=[]执行结果如下:如果需要删除结构体数组中的指定字段,可以调用内置函数rmfield。例如,如下命令:>>stu=rmfield(stu,'total')删除结构体数组stu中刚增加的字段total。6.2结构体数组6.2.4函数的结构体参数实例6-8结构体作为函数参数将实例6-6中求所有学生所有课程平均成绩的功能用函数实现。(1)将结构体作为参数。注意:函数avgc中求出了每个学生的平均成绩,但并未保存到主程序的结构体stu中,捐赠本题数组这的字段avg仍然保持为空白。6.2结构体数组(2)将字段作为参数。在该程序中,如下语句ss=[stu.score];获取结构体数组stu中所有元素的score字段值,得到一个普通的数值型数组ss,再调用mean()函数可以求得数组中所有数值型数据的平均值。6.3表格在MATLAB中,表格(Table)也是一种高级的数据结构或者数据容器,与元胞数组和结构体数组类似,其中可以保存多种不同类型的数据。表格适用于列向数据或表格数据,这些数据通常以列形式存储于文本文件或电子表格中。一般情况下,表格中的每一列对应一个变量,称为列变量。图6-7是在MATLAB变量观察子窗口中显示的一个表格及其中保存的数据,该表共有5行4列,因此共有4个列变量,变量名分别是Gender和Age等。6.3表格表格中每一行的所有列构成一条记录。同一行的各列变量取值可以具有不同的数据类型,但必须具有相同的行数。由此可见,表格可以认为是结构体数组的推广。表格中的每一行相当于结构体数组中的一个元素,而每一列相当于结构体中的一个字段。6.3表格在程序中,创建表格最常用的方法是调用table函数实现。该函数具有多种调用格式,下面分别介绍。(1)第一种调用格式T=table(var1,...,varN)在这种调用格式中,参数var1,...,varN为列变量,变量的个数即为列数。各变量的取值一般为多行数组,可以是普通数组、元胞数组、结构体数组等,数组的行数决定表格的行数。6.3.1表格的创建和查看table()函数6.3表格例如,如下命令分别创建了6个变量:>>LastName={'Sanchez';'Johnson';'Li';'Diaz';'Brown'};>>Age=[38;43;38;40;49];>>Smoker=logical([1;0;1;0;1]);>>Height=[71;69;64;67;64];>>Weight=[176;163;131;133;119];>>BloodPressure=[12493;10977;12583;11775;12280];将这6个变量作为列变量,用如下命令即可创建一个表格:>>T=table(LastName,Age,Smoker,Height,Weight,BloodPressure)得到如下结果:6.3表格6.3表格(2)第二种调用格式T=table('Size',sz,'VariableTypes',varTypes)在这种调用格式中,创建一个表格并为具有指定数据类型的变量预分配空间。其中参数sz是一个只有两个元素的数值型向量,向量中的第一个元素指定表格的行数,第二个元素指定表格的列数。参数varTypes为字符向量元胞数组,用于指定各列变量的数据类型,可以是'double'、'single'、'int8'、'int16'、'uint32'、'uint64'、'logical'、'string'、'cell'、'struct'等。6.3表格例如,如下命令:>>sz=[43];>>varTypes={'double','datetime','string'};>>T=table('Size',sz,'VariableTypes',varTypes)创建一个表格T,其中数组sz的两个元素4和3分别指定表格共有4行3列。元胞数组varTypes长度为3,等于表格的列数,其中的3个元素分别指定表格的3个列变量取值类型分别为双精度型、日期时间型和字符串型。创建的表格如下:注意,如果没有指定各列变量的名称,则默认各列变量依次命名为Var1、Var2、…。6.3表格(3)第三种调用格式T=table(___,'VariableNames',varNames,'RowNames',rowNames)这种格式是在前面两种格式的基础上,附加名-值对参数,用于指定表格中列变量(varNames)和各行(rowNames)的名称,其中varNames必须为行向量,rowNames必须为列向量,一般情况下都是字符向量元胞数组。从R2019b版本开始,列变量名称和行名称可以包含任何字符,包括空格和非ASCII码字符,也可以由任何字符(而不仅仅是字母)开头。6.3表格例如,如下命令:>>sz=[43];>>varTypes={'double','datetime','string'};>>varNames={'score','datetime','name'};>>rowNames={'1#';'2#';'3#';'4#'};>>Tab0=table('Size',sz,
'VariableTypes',varTypes,...'VariableNames',varNames,...
'RowNames',rowNames)6.3表格这种方法主要利用变量观察子窗口实现,不仅可以随意设置列变量和行,还可以很方便地设置列变量的数据类型,向表格中添加记录数据等。下面介绍具体操作步骤。(1)在命令行创建调用table()函数创建一个空表格。>>T=table在工作区中双击所创建的表格变量T,打开变量观察子窗口,其中显示一个空表格,表格中还没有任何变量和数据,如图6-8(a)所示。
图形化创建方法6.3表格(2)双击单元格,进入编辑状态,将数据填入指定的单元格,如图6-8(b)所示。(3)一旦填入数据,将自动为该列分配一个列变量,默认变量名依次为Var1、Var2等。依次双击各变量名,进入编辑状态,可以为列变量重新命名,如图6-8(c)所示。6.3表格(5)在命令行窗口输入如下命令:>>T.Properties.RowNames{1}='1#';将设置表格第一行的名称为'1#'。执行后,将第一行按语句中设置的字符向量命名,同时后面各行自动命名为'Row2'、'Row3'等。之后,双击各行名,可以根据需要对其重新命名,如图6-8(d)所示。6.3表格在MATLAB中,可以通过名称、数值索引或数据类型指定行和变量,使用小括号、大括号或点索引对表格进行索引访问。其中,使用小括号可以选择表格中的一个数据子集,返回一个新的表格;使用大括号和点索引可以对表格中指定的单元格进行访问,返回单元格中保存的数据。利用这些基本方法都可以实现表格数据的添加和删除等。6.3.2表格中数据的访问
表格数据的基本访问方法点索引访问法类似于结构体数组的访问,具体格式是在表格名后面紧跟一个小圆点,之后给定需要访问的列变量。6.3表格(1)当列变量名称是合法的MATLAB标识符时,可以将其直接放在小圆点后面,以指定需要访问的列。其中合法的标识符以字母开头,只能包括字母、数字和下划线。例如,对图6-8(d)所示表格T,使用如下命令:>>T.scoreans=908070访问表格T中名为score的第3列,返回一个列向量。6.3表格(2)如果列变量名不是合法的标识符,例如其中带有空格等,此时必须将其放在小括号中。例如,假设将表格T的第三列名称改为'Totalscore',中间有一个空格,不是合法的标识符,因此不能用上述第一种方法进行访问,而只能用如下命令:>>T.('Totalscore')(3)如果利用该列的索引编号指定需要访问的列,也必须将编号放在小括号中。例如,如下命令>>T.(3)访问表格T中的第3列。6.3表格上述点索引法可以一次访问表格中的一列数据,返回结果一般为列向量。为了访问表格中指定行和指定列,可以使用小括号或大括号。在这两种方法中,需要同时指定行和列的索引编号,或者行名称和列变量名。其中行和列的索引编号直接放在小括号或者大括号中,而行或列变量名称必须加单引号并放在大括号中。小括号索引法和大括号索引法分别类似于元胞数组的元胞索引访问和内容索引访问。其中小括号索引法返回的结果是一个新的表格,而大括号索引法返回结果是一个数组(数值型数组、字符串数组或元胞数组)。6.3表格进行表格行和列数据的添加和删除等操作,大多数都可以通过程序语句或者命令来实现,也可以在变量观察窗口直接进行操作。这里仍然根据图6-8(d)所示表格T,介绍如何在程序中实现表格数据的添加和删除等操作。要修改指定单元格的数据,可以采用前面的点索引或大括号索引法指定需要修改的单元格,并将数据赋给单元格。例如,如下两条命令>>T{1,3}=100>>T{1,'score'}=100的功能都是将表格T中第1行第3列数据修改为100。
表格数据的添加和删除6.3表格需要注意以下几点:(1)如果需要修改的指定单元格是数值型标量,则可将数据直接作为上述赋值语句右侧的表达式。(2)如果需要修改的指定单元格是字符向量,则必须将字符向量放在大括号中,再作为上述赋值语句右侧的表达式。例如,>>T{1,1}={'011'}(3)要同时修改多行多列数据,可以将这些数据按照所处的行列位置构成二维数组。如果这些数据都是数值型数据,则可以构成普通的数值型数组。如果这些数据具有不同的数据类型,或者有些数据是字符串,则可以构成元胞数组。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国光子芯片产业化进程与光通信网络升级需求报告
- 2026医疗影像AI辅助诊断商业化落地进程评估报告
- 2026汽车后市场服务模式创新研究及行业发展潜力预测深度分析报告
- 2026叶黄素酯在电子屏幕时代的需求增长潜力预测报告
- 2026中国工业软件自主可控发展现状与生态构建策略研究报告
- 2026中国移动互联网广告投放效果评估与优化策略报告
- 2026中国智能家电产品制造领域市场供需变化投资操盘规划条目
- 2026中国体育器材租赁市场运营模式与消费者接受度调查报告
- 2026中国医疗健康行业市场供需现状竞争态势投资需求分析研究报告
- 2026配电行业市场现状发展供应需求投资评估规划分析研究报告
- 太阳能光伏发电系统设计方案课件(112张)
- 奥的斯电梯OH7000调试资料故障代码OH-CONFB03
- 男m自评报告可填写
- 必修第一册第一章集合与常用逻辑用语单元测试试卷
- 市区道路施工地下高压电缆保护完整方案
- 背负式风力灭火机的操作与使用
- 截止阀基础知识与设计计算
- 连云港市东海县招聘事业单位人员考试真题及答案2022
- GB/T 41621-2022科学技术研究项目评价实施指南开发研究项目
- YY/T 1740.1-2021医用质谱仪第1部分:液相色谱-质谱联用仪
- YS/T 73-2011副产品氧化锌
评论
0/150
提交评论