Matlab使用单元数组(cell array)和结构数组 (struct array)
要在MALTAB中实现比较复杂的编程,就不能不用单元数组(cell array)和结构数组(structarray)。而且在Matlab中实现struct比C中更为方便。
一. 单元数组
单元数组中的每一个元素称为单元(cell). 单元可以包含任何类型的matlab数据, 这些数据类型包括数值数组, 字符, 符号对象, 甚至其他的单元数组和结构体. 不同的单元可以包含不同的数据.
1.1单元数组创建与显示:
1、直接赋值法:按单元索引法 和按内容索引法。(其实也就是将花括号放在等式的右边或是左边的区别)。注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过下面实例,我们看到:花括号{}用于访问单元的值,而括号()用于标识单元(即:不用于访问单元的值)。具体理解{}和()区别可以在下面代码最后分别输入A{2,2}和A(2,2)。就会发现“按内容索引法{}”能显示完整的单元内容,而“按单元索引法()”有时无法显示完整的单元内容。
>> A(1,1)={[1 2 3; 4 5 6;7 8 9]}; % 按单元索引法
>> A(1,2)={2+3i};
>> A(2,1)={'A character'};
>> A(2,2)={12:-2:0};
>> A %要想详细显示A中的内容,可用指令:celldisp(A)
A =
[3x3 double] [2.0000 + 3.0000i]
'A character' [1x7 double]
'A character' [1x7 double]
>> B{1,1}=[1 2 3;4 5 6;7 8 9]; % 按内容索引法。
>> B{1,2}=2+3i;
>> B{2,1}='A character';
>> B{2,2}=12:-2:0;
>>B
B =
[3x3 double] [2.0000 + 3.0000i]
'A character' [1x7 double]
'A character' [1x7 double]
2、利用cell函数法:即首先用cell函数生成一个空的单元数组,然后再向其中添加所需的数据。下面的代码生成一个2X3的空单元数组:
>> C=cell(2,3)
C =
[] [] []
[] [] []
[] [] []
利用cell生成空单元数组后,可以采用“按单元索引法”和“按内容索引法”对其进行赋值。在赋值时,用户一定要注意{}和()的用法。
>> C(1,1)={'This does work'}
C =
'This does work' [] []
[] [] []
[] [] []
>> C{2,3}='This work'
C =
'This does work' [] []
[] [] 'This work'
[] [] 'This work'
(1)利用cell指令创建单元数组
C=cell(2); %预设空单元数组
C(:,1)={char('Another','text string');10:-1:1} %对第一列单元赋值
C =
[2x11 char ] []
[1x10 double] []
(2)单元数组的“列”扩充和“行”扩充
AC=[A C] %空格(或逗号)利用来分隔列
A_C=[A;C] %分号利用来分隔“行”
AC =
[2x10 char] [3x3 double] [2x11 char ] []
[1.0000+ 2.0000i] [1x1 sym ] [1x10 double] []
A_C =
[2x10 char ] [3x3 double]
[1.0000+ 2.0000i] [1x1 sym ]
[2x11 char ] []
[1x10 double] []
【例】cellplot能用图形形象化地表示单元数组的内容。(A_C取自上例)
cellplot(A_C,'legend')
单元数组的收缩
A_C(3,:)=[] %删除第3行,使A_C成为的单元数组
A_C =
[2x10 char ] [3x3 double]
[1.0000+ 2.0000i] [1x1 sym ]
[1x10 double] []
把A_C重组成单元数组R_A_C
R_A_C=reshape(A_C,2,3)
R_A_C =
[2x10 char] [1x10 double] [1x1 sym]
[1.0000+ 2.0000i] [3x3 double] []
1.2 单元数组内容的调取
取一个单元
f1=R_A_C(1,3) %使用园括号寻访得到的是单元,而不仅是内容。
class(f1)
f1 =
[1x1 sym]
ans =
cell
取一个单元的内容
f2=R_A_C{1,3} %用花括号寻访取得内容
class(f2)
f2 =
sin(-3*t)*exp(-t)
ans =matlab数组赋值
sym
取单元内的子数组
f3=R_A_C{1,1}(:,[1 2 5 6]) %注意三种括号的不同用途
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论