MATLAB软件单元数组的创建和操作

2020年10月30日16:25:14MATLAB软件单元数组的创建和操作已关闭评论

MATLAB软件单元数组的创建和操作

单元数组中的每一个元素称为单元(cell)。单元中的数据可以为任何数据类型,包括数值数组、字符、符号对象、其他单元数组或结构体等。不同的单元中的数据类型可以不同。理论上,单元数组可以创建任意维数的单元数组,大多数情况下,为简单起见,创建简单的单元数组(如一维单元数组)。单元数组的创建方法可以分为两种,通过赋值语句直接创建;或通过cell函数首先为单元数组分配内存空间,然后再对每个单元进行赋值。如果在工作空间内的某个变量名与所创建的单元数组同名,那么此时则不会对单元数组赋值。

直接通过赋值语句创建单元数组时,可以采用两种方法来进行,即按单元索引法和按内容索引法(其实也就是将花括号放在等式的右边或是左边的区别)。按单元索引法赋值时,采用标准数组的赋值方法,赋值时赋给单元的数值通过花括号({})将单元内容括起来。按内容索引法赋值时,将花括号写在等号左边,即放在单元数组名称后。

例2.64 举例说明两种赋值方法。

>> clear A  %按单元索引法赋值

>> A(1,1)={[1 2 3;4 5 6; 7 8 9]}

A =

[3x3 double]

>> A(1,2)={1+2i}

A =

[3x3 double] [1.0000 + 2.0000i]

>> A(2,1)={'hello world'}

A =

[3x3 double] [1.0000 + 2.0000i]

'hello world'     []

>> A(2,2)={0:pi/3:pi}

A =

[3x3 double] [1.0000 + 2.0000i]

'hello world'   [1x4 double]

>> clear B  %按内容索引法赋值

>> B{1,1}=[1 2 3;4 5 6;7 8 9]

B =

[3x3 double]

>> B{1,2}=3+4i

B =

[3x3 double] [3.0000 + 4.0000i]

>> B{2,1}='hello world'

B =

[3x3 double] [3.0000 + 4.0000i]

'hello world'     []

>> B{2,2}=0:2:9

B =

[3x3 double] [3.0000 + 4.0000i]

'hello world'   [1x5 double]

>> A{2,2}

ans =

0 1.0472 2.0944 3.1416

>> A(2,2)

ans =

[1x4 double]

注意:“按单元索引法”和“按内容索引法”是完全等效的,可以互换使用。通过上面的实例,我们看到:花括号“{}”用于访问单元的值,而括号“()”用于标识单元(即:不用于访问单元的值)。具体理解“{}”和“()”区别可以在下面代码最后分别输入A{2,2}和A(2,2)。就会发现“按内容索引法{}”能显示完整的单元内容,而“按单元索引法()”有时无法显示完整的单元内容。如果需要将单元数组的所有内容都显示出来,则可以采用celldisp函数来强制显示单元数组的所有内容。

例如,下面的程序:

>> B{2,2}

ans =

0 2 4 6 8

>> B(2,2)

ans =

[1x5 double]

>> B{2,:}

ans =

hello world

ans =

0 2 4 6 8

>> B(2,:)

ans =

'hello world' [1x5 double]

单元数组创建的另一种方法是通过cell函数来进行创建的。在创建时,可以采用cell函数生成空的单元数组,为单元数组分配内存,然后,再向单元数组内存储内容。存储数据时,可以采用按内容赋值法或采用按单元索引法来进行赋值,例如,下面的程序:

>> C=cell(2,3)

C =

[] [] []

[] [] []

>> C{1,1}=randperm(5)

C =

[1x5 double] [] []

[] [] []

>> C{1,2}='He is a student'

C =

[1x5 double] 'He is a student' []

[]     [] []

>> C(2,3)={[1 2;3 4]}

C =

[1x5 double] 'He is a student'    []

[]     [] [2x2 double]

单元数组还可以通过扩展的方法来得到进一步的扩展。如利用方括号将多个单元数组组合在一起,从而形成维数更高的单元数组。如果想要获得单元数组子单元的内容,则可以利用数组索引的方法,将一个数组的子集提取出赋予新的单元数组。删除单元数组中的某一部分内容,可以将这部分内容设置为空数组,即可删除单元数组中的这部分内容,例如,下面的程序:

>> C=[A;B]

C =

[3x3 double] [1.0000 + 2.0000i]

'hello world'   [1x4 double]

[3x3 double] [3.0000 + 4.0000i]

'hello world'   [1x5 double]

>> E=C([1 4],:)

E =

[3x3 double] [1.0000 + 2.0000i]

'hello world'   [1x5 double]

>> C(3,:)=[]

C =

[3x3 double] [1.0000 + 2.0000i]

'hello world'   [1x4 double]

'hello world'   [1x5 double]

在单元数组的操作中,可以利用reshape函数来改变单元数组的结构。经过reshape函数对单元数组进行处理后,单元数组的内容并不增加或减少,即单元数组改变前后的总单元数目并不发生变化。

例2.65 利用repmat函数复制单元数组。

>> A=cell(4,5);

>> size(A) %计算单元数组A的大小

ans =

4 5

>> B=reshape(A,5,4)  %改变结构后的单元数组

B =

[] [] [] []

[] [] [] []

[] [] [] []

[] [] [] []

[] [] [] []

>> C=repmat(B,1,3)

C =

[] [] [] [] [] [] [] [] [] [] [] []

[] [] [] [] [] [] [] [] [] [] [] []

[] [] [] [] [] [] [] [] [] [] [] []

[] [] [] [] [] [] [] [] [] [] [] []

[] [] [] [] [] [] [] [] [] [] [] []

  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。