当前位置:
文档之家› MATLAB 结构体与单元数组
MATLAB 结构体与单元数组
real: 0 imag: 0
结构体的生成
动态扩充为数组: x(2).real = 0; % 将x扩充为1×2的结构数组 x(2).imag = 0; 在任何需要的时候,也可以为数组动态扩充字段,如增 加字段scale: x(1).scale = 0;
结构体的生成
这样,所有x都增加了一个scale字段,而x(1)之外的其他变 量的scale字段为空: x(1) % 查看结构数组的第一个元素的各个字段的内容 ans =
组;
• cell(size(a))生成与a同形式的单元型置空矩阵;
单元数组的生成
• >> a=cell(2)
• a=
• [] []
• [] []
• >> a{1,1}=[1 2;2 2] 或a(1,1)={[1 2;2 2]}
• a=
• [2x2 double] []
•
[] []
• >> a{1,2}=['MATLAB7.0']
结构体的操作
A=struct('name','B','grade',3,'score',90) fieldnames(A) getfield(A,'name') setfield(A,'name','c') isstruct(A) isfield(A,'grade') A=rmfield(A,'grade')
real: 0 imag: 0 scale: 0 x(2) % 查看结构数组的第二个元素的各个字段的内容,注 意没有赋值的字段为空 ans = real: 0 imag: 0 scale: []
结构体的生成
应该注意的是,x的real、imag、scale字段不一定是单 个数据元素,它们可以是任意数据类型,可以是向量、 数组、矩阵甚至是其他结构变量或元胞数组,而且不 同字段之间其数据类型不需要相同。例如:
clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10); 数组中不同元素的同一字段的数据类型也不要求一样: x(2).real = '123'; x(2).imag = rand(5,1);
结构体的生成
b) 使用struct函数创建结构 s = sturct('field1',values1,'field2',values2,…);
C(:,2)=[]
第23页
如果操作的单元数组为多维数组,则其索引方式逐维进行,删除元素 后,系统将该单元数组改变为一维单元数组,元素按照维数逐次排序。
删除数组元素可以每次删除多个,下标用一维数组指定
C={'cell(1,1)','cel(l,2)','cell(1,3)';... 'cell(2,1)','cell(2,2)','cell(2,3)'}
单元数组的生成
右标志法:右标志法就是把单元标志{}放在右边。“按单元索引法”
c(1,1)={'abc'}; c(1,2)={eye(2)}; c(2,1)={[1 2;3 4]}; c(2,2)={[1 2]}; c
单元数组的生成
上面的单元数组也可由下面的方法直接得到: c={'abc',eye(2);[1 2;3 4],[1 2]}
结构体、单元数组
目录
结构体 结构体的生成 结构体的操作 添加成员变量 删除成员变量 调用成员变量
2019年8月28日
第
与单元数组类似,结构体也有两种生成方式,一种是直接输入,另一 种是使用结构体生成函数 struct。
通过直接输入结构体各元素值的方法可以创建一个结构体。输入的同 时定义该元素的名称,并使用“.”将变量名与元素名连接。
单元数组的操作
• 要显示单元数组可以直接在命令窗口中输入单元数组的名字,也
可以使用函数celldisp(c)来输出;想得到单元数组中某一个单元 的值时,可以采用c(m,n)或c{m,n}的格式输出。但是它们得到的 结果表示形式是不同的。
• 函数celldisp(c)更适用于具有大量数据的单元数组的显示。 • c{m,n} 和celldisp(c)显示的结果形式相同。
单元数组的生成
• 1、单元数组的生成 • 直接生成单元数组: • 用类似矩阵的记号将给复杂的数据结构纳入一个变量之下。
和矩阵中的圆括号表示下标类似,单元数组由大括号表示 下标。
单元数组的生成
左标志法:左标志法就是把单元标志{}放在左边。“按内容索引法”
c{1,1}='abc'; c{1,2}=eye(2); c{2,1}=[1 2;3 4]; c{2,2}=[1 2];
• 'peking' [1x2 double]
单元数组的操作
显示单元数组 celldisp
在显示单元数组时 MATLAB 有时只显示单元的大小和数据 类型,而不显示每个单元的具体内容。若要显示单元数组的 内容,可以用 celldisp 函数。
celldisp 函数用于显示单元数组的全部内容,有时候只需要 显示单元数组的一个单元,可以用花括号对单元进行索引。
• a=
• [2x2 double] 'MATLAB7.0'
•
[]
[]
单元数组的生成
• >> a{2,1}=['peking']
• a=
• [2x2 double] 'MATLAB7.0'
• 'peking'
[]
• >> a{2,2}=[1 2]
• a=
• [2x2 double] 'MATLAB7.0'
单元数组
单元数组
单元数组的生成 单元数组的操作
单元数组元素的访问 单元数组的显示 单元数组的图形显示 单元数组元素的删除
第11页
单元数组的生成
• 单元数组就是每一个元素为一个单元的数组。每个单元
可以包含任意数据类型的MATLAB7.0数组。例如,单元 数组的一个单元可以是一个实数矩阵,或是一个字符串 数组,也可以是一个复向量数组。
c=
'abc'
[2x2 double]
[2x2 double] [1x2 double]
单元数组的生成
使用cell函数生成单元数组
• cell(n)生成一个n*n阶的置空单元数组; • cell(m,n) 或cell([m,n])生成一个m*n阶的置空单元数组; • cell(m,n,p,…)或cell([m,n,p,…])生成一个m*n*p…阶的置空单元数
使用struct函数也可以创建结构,该函数产生或把其 他形式的数据转换为结构数组。
field1 = 'f1'; value1 = zeros(1,10); field2 = 'f2'; value2 = {'a', 'b'}; field3 = 'f3'; value3 = {pi, pi.^2}; field4 = 'f4'; value4 = {'fourth'}; s= struct(field1,value1,field2,value2,field3,value3,field4,value4)
观的看出单元数组的结构。但是需要注意的是,cellplot 只能用于显 示二维单元数组的内容。
c={'abc',eye(2);[1 2;3 4],[1 2]} cellplot(c)
第22页
单元数组的操作
单元数组元素的删除
单元数组元素删除的方法很简单,只需将待删除的元素置为“空”即 可。需要注意的是在删除单元数组的元素时,采用的索引方式为一维 下标,格式为: A(cell_subscripts) = [ ]。
c={'abc',eye(2);[1 2;3 4],[1 2]} celldisp(c) c(1,1)使用圆括号寻访得到的是单元,而不仅是内容。 c{1,1}%用花括号寻访取得内容
单元数组的操作
单元数组的图形显示 cellplot MATLAB 支持以图形方式查看单元数组的内容。用这种方法可以直
struct 函数的最基本的使用方式是 struct_name=struct('field1',V1,'field2',V2,...),其中 fieldn 是各成员变量名,Vn为对应的各成员变量的内容。
2019年8月28日
第3页
结构体的生成
a) 使用直接引用方式定义结构使用“.”将变量名与元素名连接。 新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。 比如建立一个复数变量x: x.real = 0; % 创建字段名为real,并为该字段赋值为0 x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0 x=
结构体的操作
MATLAB中提供的结构体相关的函数及说明
函数名 struct fieldnames getfield setfield rmfield Isfield isstruct
功能描述 创建结构数组 获取结构的字段名 获取结构中指定字段的值 设置结构数组中指定的字段的值 删除结构的字段(不是字段内容) 判断是否存在该字段 判断某变量是否是结构类型