第三章 字符串、元胞和构架数组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
char(ascii_a) %把ASCII码变回字符串
(5)对字符串ASCII码数组的操作 w=find(a>='a'&a<='z'); ascii_a(w)=ascii_a(w)-32; char(ascii_a) (6)中文字符串数组 与英文字符情况一样,每个中文字符也是 占一个元素位置。 A='这是一个算例。'; A_s=size(A) A56=A([5 6]) ASCII_A=double(A) char(ASCII_A)
( 3 ) mat2str 把数值数组转换成输入形态的串 数组(常与eval指令配用) B_str=mat2str(B,4) %保持4位有效数字转换为“数组输入形式”串 Expression=['exp(-',B_str,')']; eval(Expression)把 exp(-B_str) 送去执行 将字符串转换为代码执行,并返回一个或多个值 函数原型返回值
3.2
元胞数组 元胞数组(Cell array)的基本组分(Element) 是元胞 (Cell) 。每个元胞本身在数组中是平等 的,它们只能以下标区分。元胞可以存放任何 类型,任何大小的数组 ( 如任意维数数值数组、 字符串数组、符号对象等 ) 。而且同一个元胞 数组中各元胞中的内容可以不同。 与数值数组一样,元胞数组维数不受限制, 可以是一维、二维或更高维,不过一维元胞数 组用的最多。元胞数组对元胞的编址方法也有 单下标编址和全下标编址两种。
( 2 )直接创建法之二:“编址元胞元素内涵 的直接赋值法” B{1,1}=C_str; B{1,2}=R; B{2,1}=Cn; B{2,2}=S_sym; celldisp(B)
说明:
• 在“外标识元胞元素赋值法”中,等式左边 是标识的元胞元素(采用“圆括号”),等 式右边是用“花括号”包围的“子元胞” • 在“编址元胞元素内涵的直接赋值法”中, 等式左边是编址了的“子元胞”(采用“花 括号”)内部,等式右边是内容本身。 • 显示元胞数组全部或部分内容的指令是 celldisp • 若在指令窗中,直接键入元胞数组名(比如A 或B),除“单”元素元胞外,一般只能得知 元胞所存内容的属性,而不是显示元胞数组 的内容
'has multiple rows.']
size(S)
3.1.3.2 利用串操作函数创建多行串数组 【例3.1.3.2-1】演示:用专门函数char ,str2mat , strvcat创建多行串数组示例。
S1=char('This string array','has two rows.') S2=str2mat(' 这 ',' 字符 ',' 串数组 ','',' 由 4 行 组成') %”空串“会产生空格行 S3=strvcat(' 这 ',' 字符 ',' 串数组 ','',' 由 4 行 组成') %”空串“不会产生空格行 size(S3) 说明:这 3 个函数创建多行串数组时,不必担心每行 字符数是否相等。它们总会按最长行设置第 2 维的 长度,其它行的尾部用空格填充;“空串”与“空 格串”是不同的
(7)创建带单引号的字符串 b='Example ''3.1.2-1'''
(8)由小串构成长串 ab=[a(1:7),' ',b,' .'] %这里第2个输入为空格串
3.1.3 复杂串数组的创建 3.1.3.1 多行串数组的直接创建 【例3.1.3.1-1】多行串数组的直接输入示例。
clear S=['This string array '
第三章 字符串、元胞和构架数组
四种数据类型基本构成比较表
数组 类型 数值 数组 字符 串数 组 元胞 数组 构架 数组 基本组分 元素 组分内涵 双精度实数标量 或双精度复数标量 字符 基本组分占 用字节数 8 16 2
元素
元胞 构架
可以存放任何类型、任何 大小的数据。 只有挂接在构架上的“域” 才能存放数据。数据可以 是任何类型、任何大小。
【例3.2.4-1】常用元胞数组转换函示例。 (1)num2cell 把数值数组转换成元胞数组
rand('state',0); A=rand(2,3,2) C1=num2cell(A) %把数值数组A转换成维数大小相同的元胞数组C1 C2=num2cell(A,1) %把“行”方向元素装入C2的一个元胞 C3=num2cell(A,[2,3]) %把“列、页”方向元素装入C3的一个元胞区

3.1.3.1 转换函数产生数码字符串 【 例 3.1.3.3-1】 最 常 用 的 数 组 / 字 符 串 转 换 函 数 int2str , num2str , mat2str 示例。 ( 1 ) int2str 把整数数组转换成串数组(非整数将 被四舍五入圆整后再转换) A=eye(2,4); %生成一个(2×4)数值数组 A_str1=int2str(A) %转换成(2×10)串数组 (2)num2str把非整数数组转换为串数组 rand('state',0) B=rand(2,4); B3=num2str(B,3) 保持 3 位有效数字,转换为串
不定 不定
3.1 字符串数组 3.1.1 字符串入门 【例 3.1.1-1】先请读者实际操作本例,以体会数值量 与字符串的区别。 clear a=12345.6789 class(a) a_s=size(a) b='S' class(b) b_s=size(b) whos列出当前工作空间中所有变量的名字尺寸字节 数属性
【例 3.2.2-2】cellplot 能用图形形象化地表示元 胞数组的内容。(A_C取自上例) cellplot(A_C,'legend') 说明: • 指令cellplot(A_C,‘legend’)中的第2个 输入宗量是用于显示色彩图例的。该 指令用 大白方格表示元胞,用小方格表示所存数组的 元素,色彩表示数据属性。
3.1.2 串数组的属性和标识 【例3.1.2-1】本例演示:串的基本属性、标识和简单操作。 (1)创建串数组 a='This is an example.' (2)串数组a的大小 size(a)
(3)串数组元素的标识 a14=a(1:4) ra=a(end:-1:1) (4)串数组的ASCII码 ascii_a=double(a) %产生ASCII码
3.2.4 元胞数组转换函数 C=num2cell(A,dimN) %把 dimN指定“维号”方向的数组元素存为 C 的一个元胞,当dimN缺省时。默认数组每个 元素各存为C的一个元胞 C=mat2cell(B,M,N) %把矩阵 B转换为元胞数组 C;M、N 的元素数 分别决定C的行数、列数;M、N的元素值分 别决定C中相应位置元胞的行、列大小 D=cell2mat(C) %把一个适当的元胞数组变换为单一的矩阵
3.2.1元胞数组的创建和显示 1.元胞标识寻访和内容编址寻访的不同 在元胞数组中,元胞和元胞里的内容是两 个不同范畴的东西。因此寻访元胞和元胞中的内 容是两种不同的操作。MATLAB提供了两种不 同的操作:“元胞外标识(Cell Indexing)”和“元 胞内编址(Content Addressing)” 例如:元胞数组A,A(2,3)就是指A元胞数组中的 第2行第3列元胞元素;而A{2,3}就是指A元胞数 组第2行第3列元胞中所允许存或取的内容。
3.1.1 串转换函数 【例3.1.4-1】fprintf, sprintf, sscanf的用法示例。
a=rand(2,2); s1=num2str(a) s_s=sprintf('%.10e\n',a) %10数位科学记述串,每写一个元素就换行 fprintf('%.5g\\',a)%以5位数位最短形式显示 s_sscan=sscanf(s_s,'%f',[3,2]) %浮点格式把串转换成(3×2)数值数组 说明:与num2str、mat2str相比,fprintf、sprintf的转换格 式更灵活;fprintf与sprintf的区别是,前者把转换结果书 写于屏幕或指定的文件,而后者则把转换结果存放于变 量。;与str2num相比,sscanf的转换方式更灵活
【例3.2.2-3】元胞数组的收缩和重组。 (1)元胞数组的收缩 A_C(3,:)=[] (2)把A_C重建成(2×3)的元胞数组 R_A_C=reshape(A_C,2,3)
3.2.3 元胞数组内容的调取 【例3.2.3-1】元胞数组内容的调取示例。 (1)调取一个元胞 f1=R_A_C(1,3) class(f1) (2)调取一个元胞的内容 f2=R_A_C{1,3} class(f2) (3)调取元胞内的子数组 f3=R_A_C{1,1}(:,[1 2 5 6]) (4)同时取多个元胞内容 [f4,f5,f6]=deal(R_A_C{[1,3,4]}) %deal可把输入宗量逐个分配给输出宗量使用。
3.2.2 元胞数组的扩充、收缩和重组 【例3.2.2-1】元胞数组的扩充。 (1)利用cell指令创建元胞数组 C=cell(2); C(:,1)={char('Another','text string');10:-1:1} (2)元胞数组的“列”扩充和“行”扩充 AC=[A C] A_C=[A;C]
利用元胞数组创建复杂字符串 【例3.1.3.4-1】元胞数组在存放和操作字符串上的应用。
a='MATLAB 6.x'; b='includes new data types:'; c1='◆Multidimensional array'; c2='◆User-definable data structure'; c3='◆Cell arrays'; c4='◆Character array'; c5='◆Function handle'; c=char(c1,c2,c3,c4,c5); C={a;b;c}; disp([C{1:2}]) disp(' ') disp(C{3})
【例3.1.3.3-2】综合例题:在MATLAB计算生成的图形上 标出图名和最大值点坐标。
clear,a=2;w=3;t=0:0.01:10; y=exp(-a*t).*sin(w*t); [y_max,i_max]=max(y); 找最大值元素位置 t_text=['t=',num2str(t(i_max))] 生成最大值点横坐标字 符串 y_text=['y=',num2str(y_max)]; 纵坐标字符串 max_text=char('maximum',t_text,y_text); tit=['y=exp(',num2str(a),'t)*sin(',num2str(w),'t) '];生成标志图名用的字符串 plot(t,zeros(size(t)),'k')画纵坐标为 0 的基准线 hold on保持绘制的线不被清除 plot(t,y,'b')用兰色画 y(t) 曲线 plot(t(i_max),y_max,'r.','MarkerSize',20) 用大红点 text(t(i_max)+0.3,y_max+0.05,max_text)最大值点 title(tit),xlabel('t'),ylabel('y'),
(2) mat2cell把矩阵分解成元胞数组 clear,x=zeros(4,5); x(:)=1:20 C4=mat2cell(x, [2 2], [3 2]) %把数组x转移到(2×2)的元胞数组C4 %数组x的分块方式如下: %“行维”方向分成两块,第一块占2行,第二块占2行 %“列维”方向分成两块,第一块占3列,第二块占2列 celldisp(C4) (3)cell2mat把元胞数组转换成矩阵 D=cell2mat(C4(1,:)) %C4的第一行子元胞数组转换成单个矩阵
2.元胞数组的创建和显示
【例 3.2.1.2-1】本例演示(2×2)元胞数组的创建。 C_str=char('这是','元胞数组创建算例 1'); R=reshape(1:9,3,3); Cn=[1+2i]; S_sym=sym('sin(-3*t)*exp(-t)'); (1)直接创建法之一:“外标识元胞元素赋值法” A(1,1)={C_str}; A(1,2)={R}; A(2,1)={Cn}; A(2,2)={S_sym}
相关文档
最新文档