matlab元胞元素_Matlab元胞数组(Cell Arrays)的创建及访问方式

在使用 Matlab 的过程中经常遇到元胞数组(Cell Arrays),以前对元胞数组的用法和寻址方式模模糊糊,今天就把元胞数组彻底剖析清楚。

1.元胞数组(Cell)的创建方式

可以通过以下两种方式创建Cell元胞数组:使用赋值语句

使用 cell 函数预分配数组,然后将数据分配给单元

在此之前,有必要了解一下元胞数组的结构以及存储数据的方式。

元胞数组是 MATLAB 中的一种特殊数组,数组的元素叫做 cell,cell 可以作为容纳其他 MATLAB 数组的容器。可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。例如,一个元胞数组中的一个 cell 单元可能包含一个实矩阵,另一个 cell 单元可能包含文本字符串数组,再一个 cell 单元可能包含复数向量。也就是说它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等。

下图所示的是一个 2×3 的元胞数组的结构,每一个格子都是一个 cell 单元,单元里面存储的数据类型不尽相同。

23be217a291dc8cfd8ee2980c88c6770.png

元胞数组第1行的3个单元包括了整数数组、字符串数组和一个复数数组,第2行的3个单元包括了行向量 、整数数组 以及另外一个元胞数组的嵌套。

和数值数组一样,元胞数组的维数不受限制,元胞数组可以是一维的、二维的,也可以是多维的。对元胞数组的元素进行寻访,可以使用“单下标”方式或者“全下标”的方式。在表现形式上,元胞数组和一般矩阵一样,元胞数组的尺寸也必须是长方形的。一般矩阵的创建使用中括号 "[ ]" ,而元胞数组使用的是花括号 "{ }" 。元胞数组的创建方式同矩阵的创建方式类似,只需要将中括号 "[ ]" 替换为花括号 "{ }" 即可。在元胞数组创建的过程中使用逗号或者空格来分隔元素,使用分号来分行。

(1)使用赋值语句创建

您可以通过将数据分配给单个单元(一次一个单元)来构建元胞数组。构建完成后 MATLAB 会自动创建元胞数组。有两种将数据分配给单元的方法:

a.单元索引赋值

例如,创建一个2×2的元胞数组 A,使用单元索引时,数组的下标需要用圆括号 "( )" ,等式右边单元里存放的内容元素需用大括号 "{ }" 括起来。A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};

A(1,2) = {'Anne Smith'};

A(2,1) = {3+7i};

A(2,2) = {-pi:pi/10:pi};

b.内容索引赋值

创建一个与上面相同的元胞数组 A ,由于是直接进行内容索引,数组的下标需要用 "{ }" 括起来,索引等式的右边直接写要存放的内容元素即可。A{1,1} = [1 4 3; 0 5 8; 7 2 9];

A{1,2} = 'Anne Smith';

A{2,1} = 3+7i;

A{2,2} = -pi:pi/10:pi;

在Matlab中元胞数组 A 显示为:A =

2×2 cell 数组

{3×3 double } {'Anne Smith'}

{[3.0000 + 7.0000i]} {1×21 double }

其次,celldisp() 函数可以显示完整的元胞数组:>> celldisp(A)

A{1,1} =

1 4 3

0 5 8

7 2 9

A{2,1} =

3.0000 + 7.0000i

A{1,2} =

Anne Smith

A{2,2} =

1 至 7 列

-3.1416 -2.8274 -2.5133 -2.1991 -1.8850 -1.5708 -1.2566

8 至 14 列

-0.9425 -0.6283 -0.3142 0 0.3142 0.6283 0.9425

15 至 21 列

1.2566 1.5708 1.8850 2.1991 2.5133 2.8274 3.1416

如果将数据分配给当前数组维度之外的单元 ,MATLAB 会自动扩展数组以包括指定的下标。并且 Matlab 会自动用空矩阵填充所有空缺的单元。例如,以下赋值将2×2的元胞数组 A 变成3×3的元胞数组。A(3,3)= {5};>> A(3,3)= {5}

A =

3×3 cell 数组

{3×3 double } {'Anne Smith'} {0×0 double}

{[3.0000 + 7.0000i]} {1×21 double } {0×0 double}

{0×0 double } {0×0 double } {[ 5]}

此时,元胞数组的结构如下:

3898a2f568e01be2bc73320e16b3c4ab.png

(2)使用 Cell 函数预分配数组创建

cell 函数允许用户预分配指定大小的空元胞数组。例如,下面的语句创建了一个空的2×3元胞数组。B = cell(2,3);

再使用赋值语句进行内容的填充:B(1,3) = {1:3};

结果如下:>> B = cell(2,3);

>> B(1,3) = {1:3};

>> B

B =

2×3 cell 数组

{0×0 double} {0×0 double} {1×3 double}

{0×0 double} {0×0 double} {0×0 double}

2.元胞数组(Cell)的访问方式

元胞数组的访问主要有以下2种方式:使用内容索引访问单元内容,下标用 { }

使用单元索引访问单元结构类型,下标用 ( )

X= C(a,b) 使用这种 "( )" 形式的返回的是cell类

X = C{a,b} 使用这种 "{ }" 形式的返回的是cell中的内容

(1)内容索引访问

考虑下面这个2×2的元胞数组:N{1,1} = [1 2; 4 5];

N{1,2} = 'Name';

N{2,1} = 2-4i;

N{2,2} = 7;

你可以通过 N{1,2} 来获取里面存储的字符串内容:>> N{1,2}

ans =

'Name'

要获取单元内容的子集,可以连接索引表达式。例如,要获取 N{1,1}单元内容中的(2,2)元素,可以使用:d = N{1,1}(2,2)>> d = N{1,1}(2,2)

d =

5

(2)单元索引访问

还是上面元胞数组 N ,如果输入的是 N(2,1),则返回的是单元的类型:>> N(2,1)

ans =

1×1 cell 数组

{[2.0000 - 4.0000i]}

使用单元索引可以将任何一组单元分配给另一个变量,从而创建一个新的元胞数组。使用冒号运算符访问元胞数组中的单元子集。例如,将元胞数组 A 中的第2行第3行,第2列第3列的单元赋给 B ,形成一个新的元胞数组。

9e39c3e1a2b7e0428f013da2be394e40.png

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值