单元数组(2019.10.23)

一、单元数组的创建

单元数组是一种MATLAB数组,它的每一个元素是单元,在单元里可以存放各种类型的MATLAB数组。表3-1是 2 行 3 列单元数组的例子:

单元数组的创建可以通过对单元数组的赋值来创建单元数组,也可以对单元数组的预分配来创建。

对于单元数组预分配的书写格式为:

C=cell(n) %为建立 n 阶单元空方阵
C=cell(m,n) %为建立 m 行 n 列的单元空矩阵
C=cell(size(A)) %为建立与矩阵A同维的空单元矩阵。

单元数组的赋值可以通过两种方式来进行:
(1)下标索引:用圆括号内的下标数来显示单位号,在等式右端用花括号把单元的内容括起来。例如一个2行2列的单元数组,赋值如下:

>> A(1,1)={magic(3)};   %在(1,1)单元里为3阶魔方矩阵
>> A(1,2)={'10/1/2004'};  %在(1,2)单元里为日期
>> A(2,1)={1:5};  %在(2,1)单元里,是1:5的行向量
>> A(2,2)={[1+2*i 2-3*i;2+3*i 1-2*i]};  %在(2,2)单元里,是复数矩阵
>> A

A =

  2×2 cell 数组

    [3×3 double]    '10/1/2004' 
    [1×5 double]    [2×2 double]

>> celldisp(A)  %显示单元数组A的全部内容
 
A{1,1} =
 
     8     1     6
     3     5     7
     4     9     2

 
 
A{2,1} =
 
     1     2     3     4     5

 
 
A{1,2} =
 
10/1/2004
 
 
A{2,2} =
 
   1.0000 + 2.0000i   2.0000 - 3.0000i
   2.0000 + 3.0000i   1.0000 - 2.0000i

(2)单元索引:将单位数组的单元号用花括号括起来,在等式右侧写入单元的内容。

>> A{1,1}=magic(3);
>> A{1,2}='10/1/2004';
>> A{2,1}=1:5;
>> A{2,2}=[1+2*i 2-3*i;2+3*i 1-2*i];
>> celldisp(A)
 
A{1,1} =
 
     8     1     6
     3     5     7
     4     9     2

 
 
A{2,1} =
 
     1     2     3     4     5

 
 
A{1,2} =
 
10/1/2004
 
 
A{2,2} =
 
   1.0000 + 2.0000i   2.0000 - 3.0000i
   2.0000 + 3.0000i   1.0000 - 2.0000i

对于单元数组中,单元中的单元数组称为嵌套的单元数组或称为单元数组的子集。对于子集的赋值可以通过在两次单元索引的等式右侧赋值。

上述表3-1可以用以下语句赋值:

>> C=cell(2,3)  %预设单元数组的大小

C =

  2×3 cell 数组

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

>> C{1,1}=magic(3);
>> C{1,2}=strvcat('John Smith','3/8/2005','Class II');
>> C{1,3}=[2+i 1-2*i;1+2*i 2-i];
>> C{2,1}=[1.4 2.8 3.3 5.6];
>> C{2,2}=[2 3 4;3 6 10;4 10 20];
>> C{2,3}{1,1}='text';  %设置(2,3)单元的子集(1,1)内容
>> C{2,3}{1,2}=[4 2;1 5];  %设置(2,3)单元的子集(1,1)内容
>> C{2,3}{2,1}=[4 2 7];  %设置(2,3)单元的子集(2,1)内容
>> C{2,3}{2,2}=[0.5+6*i];  %设置(2,3)单元的子集(2,2)内容
>> C

C =

  2×3 cell 数组

    [3×3 double]    [3×10 char  ]    [2×2 double]
    [1×4 double]    [3×3  double]    {2×2 cell  }

>> celldisp(C)
 
C{1,1} =
 
     8     1     6
     3     5     7
     4     9     2

 
 
C{2,1} =
 
    1.4000    2.8000    3.3000    5.6000

 
 
C{1,2} =
 
John Smith
3/8/2005  
Class II  
 
 
C{2,2} =
 
     2     3     4
     3     6    10
     4    10    20

 
 
C{1,3} =
 
   2.0000 + 1.0000i   1.0000 - 2.0000i
   1.0000 + 2.0000i   2.0000 - 1.0000i

 
 
C{2,3}{1,1} =
 
text
 
 
C{2,3}{2,1} =
 
     4     2     7

 
 
C{2,3}{1,2} =
 
     4     2
     1     5

 
 
C{2,3}{2,2} =
 
   0.5000 + 6.0000i
>> cellplot(C)  %用图形显示单元数组C的结构图

单元数组C的图形显示:在这里插入图片描述
矩形表示向量元素或矩阵元素,标量或短的文本字符串则表示文本

二、单元数组的删除和改写

与一般数组类似,可以用赋值空矩阵来删除单元数组的某单元,亦可用reshape来改写矩阵。

例3-23

已知单元数组A={magic(3),‘10/1/2005’,‘name_wang’;[1 3 5 7],eye(3),’$5000’},要求删除单元{1,1},{2,1}和{2,2}。

>> A={magic(3),'10/1/2005','name_wang';[1 3 5 7],eye(3),'$5000'}

A =

  2×3 cell 数组

    [3×3 double]    '10/1/2005'     'name_wang'
    [1×4 double]    [3×3 double]    '$5000'    

>> A{1,1}=[]  %删除(1,1)单元

A =

  2×3 cell 数组

              []    '10/1/2005'     'name_wang'
    [1×4 double]    [3×3 double]    '$5000'    

>> A{2,1}=[]  %删除(1,2)单元

A =

  2×3 cell 数组

    []    '10/1/2005'     'name_wang'
    []    [3×3 double]    '$5000'    

>> A{2,2}=[]  %删除(2,2)单元

A =

  2×3 cell 数组

    []    '10/1/2005'    'name_wang'
    []             []    '$5000'    

例3-24

已知单元数组A=cell(4,6),要求改写成 3 行 8 列的单元数组B,再取B矩阵的第4~8列组成单元数组C。

>> A=cell(4,6)  %预分配单元数组A

A =

  4×6 cell 数组

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

>> B=reshape(A,3,8)  %改写成3行8列

B =

  3×8 cell 数组

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

>> C=B(:,4:8)  %取B的4~8列得单元数组C

C =

  3×5 cell 数组

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

三、单元数组的运算

例3-25

已知单元数组A{1,1}=rand(2,3),A{2,1}=[1 3 5 7],A{1,2}=rand(3,2),A{2,2}=1:4,求单元元素的乘积A{1,1}*A{1,2}并存入A{1,3},以及单元元素的卷积conv(A{2,1},A{2,2})并存入A{2,3}。

>> A=cell(2,3)

A =

  2×3 cell 数组

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

>> A{1,1}=rand(2,3);
>> A{1,2}=rand(3,2);
>> A{2,1}=[1 3 5 7];
>> A{2,2}=1:4;
>> A{1,3}=A{1,1}*A{1,2};
>> A{2,3}=conv(A{2,1},A{2,2});
>> A

A =

  2×3 cell 数组

    [2×3 double]    [3×2 double]    [2×2 double]
    [1×4 double]    [1×4 double]    [1×7 double]

>> celldisp(A)
 
A{1,1} =
 
    0.9572    0.8003    0.4218
    0.4854    0.1419    0.9157

 
 
A{2,1} =
 
     1     3     5     7

 
 
A{1,2} =
 
    0.7922    0.0357
    0.9595    0.8491
    0.6557    0.9340

 
 
A{2,2} =
 
     1     2     3     4

 
 
A{1,3} =    %矩阵乘积
 
    1.8027    1.1076
    1.1211    0.9931

 
 
A{2,3} =    %向量卷积
 
     1     5    14    30    41    41    28
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值