MATLAB中的单元阵列与结构体及其区别
Matlab使用单元数组和结构数组-推荐下载

Matlab使用字符串数组、单元数组(cell array)和结构数组(struct array)要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。
而且在Matlab中实现struct比C中更为方便。
MATLAB字符串数组的创建与运算字符串数组主要用于可视化编程内容,如界面设计和图形绘制。
1.字符串变量的创建字符变量的创建方法是:在指令窗口中先把待建的字符放在“单引号对”中,再按回车键。
注意,该“单引号对”必须在英文状态下输入。
这“单引号对”是MATLAB用来识别字符串变量所必须的。
如:>>a='This is an example.'a =This is an example.>>msg = 'You''re right!' %创建带单引号的字符串msg =You're right!2.字符串数组的标识字符串变量的每个字符(英文字母、空格和标点都是平等的)占据一个元素位,在数组中元素所处的位置用自然数标识。
如:>>a='This is an example.'>>b=a(1:4) % 提出一个子字符串b =Thisra=a(end:-1:1) % 字符串的倒排ra =.elpmaxe na si sihT又如:>>A='这是一个算例。
';>>B=size(A) % 符号数组A 的“大小”B =1 7>>C=A([5 6]) % 提出一个子字符串C =算例3.字符串的ASCII码字符串的存储是用ASCII码实现的。
指令abs和double都可以用来获取串数组所对应的ASCII码数值数组。
指令char可把ASCII码数组变为串数组。
如>>d=double(a)d =84 104 105 115 32 105 115 32 97 110 32 101 120 97 109 112 108 101 46>>char(d)ans =This is an example.例:对字符串ASCII码数组的操作:使字符串中字母全部大写>>w=find(a>='a'&a<='z'); %找出串数组a中,小写字母的元素位置。
Matlab字符串、单元数组和结构数组

2.2 字符串、单元数组和结构数组教学目标:1. 掌握字符串的创建方法;2. 掌握单元数组的创建方法;3. 掌握结构数组的创建方法。
重点、难点:MATLAB字符串创建;结构数组创建。
教学方法:讲授、上机实践课时安排:2教学过程:新课导入:对于MATLAB编程来说,字符串、单元数组和结构数组是MATLAB最基本的三种数据类型。
1. 字符串概述:1)字符串在数据的可视化、应用程序的交互方面起到非常重要的作用2)创建字符串时需要使用单引号将字符串的内容包括起来3)字符串一般以行向量形式存在,并且每一个字符占用两个字节的内存主要内容1.1字符串创建1.2字符串的合并1.3字符串函数1.1字符串创建直接用单引号将一系列字符串括起来,其中的每个字符都是该字符串的一个元素,通常用两个字节来存储;当字符串文字中包含单引号时,每个单引号符号需要使用2个连续的单引号字符;并且可以直接引用短的字符串构成长的字符串。
>> a='hello';>> b='''你好''';>> c=[a,' ',b,'.'];>> aa = hello>> bb = '你好'>> cc = hello '你好'.1.2字符串的合并1. 用char把一连串的字符合并起来>> c1=char('China changchun','ccit');>> c1c1 = China changchun ccit2. 用strcat 和strvcat把一连串的字符合并起来>> a1='auto';>> a2='film';>> a3='forest';>> a4='city';>> b1=strvcat(a1,a4);>> b1b1 = autocity>> b=strcat(a1,a2)>> bb = autofilm注意,函数strcat()在合并字符串的同时会把字符串结尾的空格删除。
MATLAB字符串、单元数组和结构

判断字符串是否相等
• 有两个函数可以用来 判断两个输入的字符 串是否相等。
– strcmp函数:比较两个 字符串是否相等,当相 等时,系统将返回值1, 不相等时,返回值0;
– strncmp函数:比较两 个输入字符串的前几个 字符是否相等,当相等 时,系统将返回值1, 不相等时,返回值0。
• >> words1=‘人民文学'; • >> words2=‘人民的同志'; • >> N=strcmp(words1,words2) • N=
我们班一起去上海旅游。
• >> str(6)
• ans =
•0
(2)字符串的基本变换
• 基本变换的种类
– 字符串的ASCII码操作 – 使用char函数进行逆变
换 – 字符串的执行
• >> for n = 2:3 • eval([‘M’ num2str(n) ‘ =
magic(n)’]) %用eval函数来执行字符串。 • end • M2 = • 13 • 42 • M3 = • 816 • 357 • 492
• A= • [2x2 double] 'love' • ‘呼唤和平' [4x3 double] • >> a=reshape(A,1,4) • a= • [2x2 double] ‘呼唤和平'
'love' [4x3 double] • >>
3. 结构型变量
• 直接输入法生成结构型变量 • 使用struct函数生成结构型变量 • 在结构体变量中添加成员变量 • 在结构体变量中删除成员变量 • 在结构体变量中调用成员变量 • getefield和setfield函数的使用
MATLAB数据类型—结构体(struct)

MATLAB数据类型—结构体(struct)前⾔对于有C语⾔基础的使⽤者,结构体这个词你可能很熟悉。
没错,MATALB编程中也有结构体。
⽽且与C语⾔的结构体相⽐,它拥有更独特的特性。
与元胞(cell)类型⼀样,结构体也可以存储任意类型的数据。
当然,它们也存在许多不同点。
最⼤的不同点是,结构体是以不同名字的字段作为存储容器,每个字段都可以存储任意类型的数据。
此外,若要构建结构体数组,则要求每个结构体的字段数⽬和字段名字必须相同。
下⾯将讲述结构体数组,单个结构体也视为1x1的结构体数组。
正⽂1. 结构体数组的创建直接对结构体变量名.字段名赋值(字段的命名规则和变量⼀样)% 1x3的结构体数组(不明确指定位置,按⽔平⽅式排列)s(1).name = 'LiSi';s(1).gender = 'Male';s(1).age = 18;s(1).test = {'hello', 1};s(2).name = 'LiSi';s(2).gender = 'female';s(2).age = 20;s(2).test = s(1);ss1 = s(1)s2 = s(2)代码运⾏结果如下。
可以看出字段可以存储任意类型的数据,甚⾄是元胞数组和结构体。
使⽤函数struct()创建% 1x1的结构体数组s1 = struct; % 不含字段s2 = struct('name', '李四', 'gender', 'male');% 1x3的结构体数组s3 = struct('name', {'张三', '李四'}, 'gender', 'male'); % 通过元胞数组,来创建多结构体的结构体数组s3s3_1 = s3(1)s3_2 = s3(2)代码运⾏结果如下。
5 数据类型:字符串、单元数组和结构体

语法:单引号表示字符串, 作用:指定数据类型
相应的convert函数(类型转换)
• double、single • int8, uint8, int16, uint16, int32, uint32, int64, uint64
• char • logical • cast
>> a1=1:7 a1 = 1 2 3 4 5 6 7 >> class(a1) ans = double >> a2=uint8(a1) % 类型转换 >> a3=cast(a1,'uint8') % 类型转换 a2 = 1 2 3 4 5 6 7 a3 = 1 2 3 4 5 6 7 >> class(a2) >> class(a3) ans = uint8 ans = uint8
MATLAB数据类型 (Data Type)
郑元满 地球物理与信息技术学院 中国地质大学(北京)
大纲
1. 2. 3. 4. MATLAB Data Type(Class) 字符串 单元数组/元胞数组(Cell Array) 结构体(Struct)
一、MATLAB 数据类型 (DataType/Class)
strtok
找出字符串中的第一部分
字符串转换函数
函数
abs char double fprintf sprintf sscanf setstr str2num hex2num
含义
把串译成ASCⅡ码 任何类型转换成串
函数
base2dec bin2dec
含义
base、bin、hex与 dec之间的转换。 base:任意进制串 bin:二进制串 hex:十六进制串 dec:十进制整数 整数转换成串 数值矩阵转换成串 数值转换成串
matlab判断变量类型的函数

matlab判断变量类型的函数在MATLAB中,我们可以使用内置函数class()来判断一个变量的类型。
这个函数会返回一个字符串,表示变量的类型。
下面是一些常见的变量类型:1. 数值型:包括整型和浮点型。
2. 字符串:用单引号或双引号括起来的一串字符。
3. 逻辑型:只有两个可能的值,true和false。
4. 结构体:由多个字段组成的复合数据类型。
5. 单元格:可以容纳不同类型的数据,类似于一个混合的数组。
6. 函数句柄:可以表示一个函数,可以用来调用函数或传递函数作为参数。
7. 对象:面向对象编程中的概念,用于封装数据和方法。
接下来,我们将逐一介绍如何使用class()函数来判断这些变量类型。
1. 数值型数值型变量可以是整型或浮点型。
我们可以使用isinteger()函数来判断一个变量是否为整型,使用isfloat()函数来判断一个变量是否为浮点型。
例如,下面的代码可以判断一个变量x是否为整型或浮点型:if isinteger(x)disp('x is an integer.');elseif isfloat(x)disp('x is a float.');elsedisp('x is not a number.');end2. 字符串字符串变量可以用单引号或双引号括起来。
我们可以使用ischar()函数来判断一个变量是否为字符串。
例如,下面的代码可以判断一个变量str是否为字符串:if ischar(str)disp('str is a string.');elsedisp('str is not a string.');end3. 逻辑型逻辑型变量只有两个可能的值,true和false。
我们可以使用islogical()函数来判断一个变量是否为逻辑型。
例如,下面的代码可以判断一个变量flag是否为逻辑型:if islogical(flag)disp('flag is a logical.');elsedisp('flag is not a logical.');end4. 结构体结构体由多个字段组成,每个字段可以是不同类型的变量。
MATLAB 8.5基础教程第3章 单元数组与结构数组

3.1.1 串数组的生成
• 4.利用命令input法 • 格式 input(out,in) %显示出字符串out的文本并等待终端的输入,in 可缺省 • 如果变量in是‘s’,则输入的内容以字符串的形式进行保存。 • 例如,在命令行窗口中输入: >> x=input('Give a number x:') 显示的结果为: Give a number x: • 然后在“x:”的后面输入一个数,不妨为6,回车即得: x= 6 • 此时数值6以变量x的形式显示在Workspace工作区内。若执行如下 命令: >> x=input('Give a number x:','s') Give a number x:6 x= 6 此时数字6以字符串的形式保存在Workspace工作区内。
• 2.利用str2num和num2str实现字符串与数值的相互转 换。例如: >> X=1:9; >> S=num2str(X) S= 1 2 3 4 5 6 7 8 9 • 注:虽然S的显示结果与X看上去一样,但其含义不同。 X是数组,S是字符串。同样字符串可以转化为数组。
3.2 单元数组
• 单元数组又称细胞数组(Cell array),其基本元素是 细胞,每个细胞可以存储不同类型、不同维数的数据。
第三章 单元数组与结构数组
• 单元数组和结构数组是MATLAB中的两种特殊的数据类型, 用户可以将不同数据类型但彼此相关的数据集成在一起, 进行数据组织和访问,使数据的管理更简便、容易。
本章重点
• • • • 字符串生成及查找 单元数组创建及显示 结构数组创建及访问 Map容器创建及编辑
3.1 字符串数组
Matlab基础之单元数组和结构数组

Matlab基础之单元数组和结构数组Matlab基础之单元数组和结构数组前⾔:单元数组和结构数组是⼀种新的数据类型,能将不同类型、不同维数的数组组合在⼀起,从⽽⽅便对不同的数据类型⽅便管理和维护。
如上图所⽰的2*2矩阵中,分别存储着四种不同的数据类型,分别为数组、字符串、空矩阵、复数矩阵。
⼀、单元数组(细胞数组)在单元数组中,通过单元数组的名字是不能访问相应的元素,只能访问对应的索引号,因为单元数组中存储的是指向某种数据结构的指针。
创建并赋值:1.赋值语句创建:分为内容创建和单元索引创建内容创建:⼀个⼀个元素进⾏创建,⽤⼤括号c{1,1}=[12;34];c{1,2}=[12;34;214];c{2,1}=[];c{2,2}='i love a pig';b=c(2,2);d=c{2,2};cbd%%%%%%result:c =[2x2 double] [3x2 double][] 'i love a pig'b ='i love a pig'd =i love a pig单元索引创建:⼀个⼀个单元进⾏创建,⽤⼩括号c(1,1)={[12;34]};c(1,2)={[12;34;214]};c(2,1)={[]};c(2,2)={'i love pig'};b=c(2,2);d=c{2,2};cbd%%%%%%result:c =[2x2 double] [3x2 double][] 'i love a pig'b ='i love a pig'd =i love a pig注意:单元矩阵与普通矩阵名字不能相同,否则偶同矩阵覆盖单元矩阵。
2.cell()函数创建:>> b=cell(2,3)b =[] [] [][] [] []对它赋值如上⾯的⽅法,分内容和单元创建两种⽅法。
3.⽤⼤括号直接创建并赋值:如3*4的单元矩阵>> b={[2 3;4 6],'you are a pig',[],[2;2;1];[2 3;4 6],'you are a pig',[],[2;2;1];[2 3;4 6],'you are a pig',[],[2;2;1]}b =[2x2 double] 'you are a pig' [] [3x1 double][2x2 double] 'you are a pig' [] [3x1 double][2x2 double] 'you are a pig' [] [3x1 double]总结:第三种创建⽅法最简单和⽅便!4.如何显⽰上⾯的⽅法也介绍如何显⽰单元数组,但只能显⽰其中⼀个元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、什么是单元阵列?
单元阵列又叫cell(元胞)阵列,以前见过“元胞数组”一词,其实是可以理解成阵列的,比如二维数组,可以理解成2行n列的矩阵或阵列。
2、单元/元胞阵列是如何构成的呢?
我们都熟悉阵列或矩阵的构成,比如一个m*n大小的矩阵,那么它有m行、n列,共有m*n个元素。
如果我们只在实数范围内考虑,那么对应的每一个元素就是一个实数,这是一般的实矩阵。
单元阵列也可以有m行n列,对应有m*n个元素。
所不同的是单元阵列中每个元素是一个cell(元胞),而每个cell可以由不同数据格式的矩阵构成,构成每个cell的矩阵大小也可以不同,可以是一个元素,也可以是一个向量,也可以是一个多维数组。
3、如何创建一个单元阵列?
可使用cell函数创建一个空的单元阵列,具体可参考MATLAB中 help cell内容。
也可以使用大括号创建,比如我们要创建一个1x3的单元阵列c,则c={A sum(A) prod(prod(A))},可以把A设为一个向量,具体各cell数据类型读者可以用
c{1}/c{2}/c{3}读出来然后使用whos函数自己验证。
其中prod 是求积,若A为一个数组(或一维向量),则一个prod后即可求出所有元素之积,第二个prod则还为原结果。
若A为一个矩阵,
则第一个prod后针对各列求积,结果保留为一个数组,第二个prod则对该数组所有元素再求积,那么两个prod的结果即为对矩阵所有元素求积。
4、什么是结构体及其构成?
结构体可以理解为一种特殊的数据类型。
一个结构体有若干结构变量或者域构成。
每个结构变量/域类似于一个cell,结构变量可以由不同数据类型的数组构成,比如字符串、整型、浮点数……。
此处只是可以借用cell的形式来理解结构变量,但二者绝不等同。
5、如何创建结构体?
可以使用struct函数创建结构体。
我们定义结构体为
str_array,
则str_array=struct('field1',val1,'field2',val2,……),其中field1、field2为域名,val1、val2为具体值。
6、单元阵列与结构体的不同之处。
结构体(也可称为结构体阵列)中可以使用域名来访问数据,而在单元阵列中则使用矩阵的索引操作。