[3x3 double]
相对地,a{1,1}的含义为显示这个数据结构的内容。 >> a{1,1} ans =
1 3 -7 2 0 6 0 5 1
总起来说,标识a{1,1}反映的是数据结构a(1,1)内容,而标识a(1,1)是一个数据结构。
好的编程习惯
当你访问一单元阵列时,不要把()与{}混淆。它们完全不同的运算。
7.2.1 创建单元阵列
创建单元阵列有两种方法 ? 用赋值语句 ? 用函数cell创建
最简单的创建单元阵列的方法是直接把数据结构赋值于独立的单元,一次赋一个单元。但用cell函数创建将会更加地高效,所以我们用cell创建大的单元数组。
7.2.1.1 用赋值语句创建单元阵列
你可以用赋值语句把值赋于单元阵列的一个单元,一次赋一个单元。这里有两种赋值的方法,即内容索引(content indexing)和单元索引(cell indexing)。
内容索引要用到大括号{},还有它们的下标,以及单元的内容。例如下面的语句创建了一个2×2的单元阵列,如图7.2所示。
a{1,1} = [1 3 -7; 2 0 6; 0 5 1]; a{1,2} = 'This is a text string.'; a{2,1} = [3+4*i -5; -10*i 3-4*i]; a{2,2} = [];
索引的这种类型定义了包含在一个单元中的数据结构的内容。 单元索引把存储于单元中的数据用大括号括起来,单元的下标用普通下标标记法。例如下面的语句将创建一个2×2的单元阵列,如图7.2所示。
a(1,1) ={[1 3 -7; 2 0 6;0 5 1]}; a(1,2) = {'This is a text string.'}; a(2,1) = {[3+4*i -5; -10*i 3-4*i]}; a(2,2) = {[]};
索引的这种类型创建了包含有指定值的一个数据结构,并把这个数据结构赋于一个单元。
这两种形式是完全等价的,你可以在你的程序任选其一。
常见编程错误
不要创建一个与已存在的数字数组重名的元阵列。如果得名了,MATLAB会认为你把单元阵列的内容赋值给一个普通的数组,这将会产生一个错误信息。在创建单元阵列之前,确保同名的数字数字数组已经被删除。
7.2.1.2 用cell函数创建单元阵列
函数cell允许用户创建空单元阵列,并指定阵列的大小。例如,下面的语句创建一个2×2的空单元阵列。
a = cell(2, 2)
一旦单元阵列被创立,你就可以用赋值语句对单元阵列进行赋值。
7.2.2 单元创建者——大括号({})的应用
如果在单个大括号中列出所有单元的内容,那么就定义了许多的单元,在一行中的独立单元用逗号分开,行与行之间用分号隔开。例如下面的语句创建一个2×3单元阵列。
b = {[1 2], 17, [2;4]; 3-4*i, 'Hello', eye(3)}
7.2.3 查看单元阵列的内容
MATLAB可以把单元阵列每一个元素的数据结构缩合在一行中显示出来。如果全部的数据结构没有被显示出来,那么显示就是一个总结。例如,单元阵列a和b显示如下
>> a a =
[3x3 double] [1x22 char] [2x2 double] [] >> b b =
[1x2 double] [ 17] [2x1 double] [3.0000- 4.0000i] 'Hello' [3x3 double] 注意MATLAB显示的只是数据结构,包括中括号和省略号,而不包含数据结构的内容。 如果你想要知道看到单元阵列的所有内容,要用到celldisp函数。这个函数显示的是每一个单元中的数据结构的内容。
>> celldisp(a) a{1,1} =
1 3 -7 2 0 6 0 5 1 a{2,1} =
3.0000 + 4.0000i -5.0000 0 -10.0000i 3.0000 - 4.0000i a{1,2} =
This is a text string. a{2,2} = []
如果要用高质量的图象显示数据结构的内容,要用到函数cellplot。例如,函数cellplot(b)产生了一个图象,如图7.3所示。
图7.3 用函数cellplot显示单元阵列b数据结构的内容
7.2.4 对单元阵列进行扩展
一个值赋值于一个单元阵列中的元素,如果这个元素现在不存在,那么这个元素就会被自动的建立,其他所需的元素也会被自动建立。例如,假设定义了一个2×2单元阵列,如图7.1所示。如果我们执行下面的语句
a{3, 3} = 5
单元阵列将会自动扩展为3×3单元阵列,如图7.4所示。
cell 1,1 cell 1,2 cell 1,3 ?13-7?'This is a ?205? [] ??text string.' ?051?cell 2,1 cell 2,2 cell 2,3
?3+i4-5? ?-i103-i4?
cell 3,1 []
[] [] cell 3,3 [5]
cell 3,2 []
图7.4把一个值赋值于a(3,3)产生的结果。注意其他的空元素也是自动创建的。
7.2.5 删除阵列中的元素
如果要删除阵列中的所有元素,我们要用clear命令。如果要删除单元阵列中的部分元素,我们把空值赋值于这一部分元素。例如,假设a的定义如下
>> a a =
[3x3 double] [1x22 char] [] [2x2 double] [] [] [] [] [5] 我们可以用下面的语句删除第三行 >> a(3,:)=[] a =
[3x3 double] [1x22 char] [] [2x2 double] [] []
7.2.6 单元阵列数据的应用
在一个单元阵列中,数据结构中数据可以随时用内容索引或单元索引调用。 例如假设单元阵列c的定义如下 c = {[1 2; 3 4],'dogs';'cats',i}
存储于c(1,1)的内容可由下面的语句调用 >> c{1,1} ans =
1 2 3 4
同样c(2,1)中的元素可由下面的元素调用 >> c{2,1} ans = cats
一个单元内容的子集可由两套下标得到。例如,假设我们要得到单元c(1,1)中的元素(1,2)。为了达到此目的,我们可以用表达式c{1,1}(1,2),它代表单元c(1,1)中的元素(1,2)。
>> c{1,1}(1,2) ans = 2
7.2.7 字符串单元阵列
在一个单元阵列中存储一批字符串与在标准的字符数组中存储相比是非常方便的,因为在单元阵列中每一个字符串的长度可以是不相同的,而在标准字符数组的每一行的长度都必须相等。这就意味着在单元阵列中的字符串没的必要增加多余的空格。许多的MATLAB用户图形界面函数均使用单元阵列,正是基于这个原因,我们将在第十章看到。
字符串单元阵列可以由两种方法创建。我们可以用方括号把独立的字符串插入到单元阵列,我们也可以函数cellstr把一个二维字符数组转化为相应的字符串单元阵列。
下面的例子用第一种方法创建了一个字符串单元阵列,并显示出这个阵列的结果。注意下面的每一个字符串具有不同的长度。
>> cellstring{1} = 'Stephen J. Chapman'; >> cellstring{2} = 'Male';
>> cellstring{3} = 'SSN 999-99-9999'; >> cellstring
相关推荐: