MATLAB元胞数组(cell)知识
(本资料来源于网络,所有权归原作者所有,如有侵权尽快删除)
元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看作一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
(1)元胞数组的创建
>> a={'matlab',20;ones(2,3),1:10}
a =
'matlab'        [        20]
    [2x3 double]    [1x10 double]
>> b=[{'matlab'},{20};{ones(2,3)},{1:10}]
b =
'matlab'        [        20]
    [2x3 double]    [1x10 double]
>> c={10}
c =
[10]
>> c(1,2)={2}
c =
[10]    [2]
>> c(2,2)={5}
c =
[10]    [2]
[]    [5]
>> isequal(a,b)
ans =
 1
>> whos
Name      Size            Bytes Class      Attributes
a        2x2              388 cell               
ans      1x1                1 logical             
b        2x2              388 cell               
c        2x2              208 cell
用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数
组预先分配连续的存储空间,节约内存占用,提高执行效率。   
>> a=cell(1)
a =
{[]}
>> b=cell(1,2)
b =
[]    []
>> c=cell(3,3)
c =
[]    []    []
[]    []    []
[]    []    []
>> d=cell(2,2,2)
d(:,:,1) =
[]    []
[]    []
d(:,:,2) =
     []    []
[]    []
>> whos
Name      Size            Bytes Class      Attributes
a        1x1                  4 cell               
ans      1x1                  1 logical             
b        1x2                  8 cell               
c        3x3                36 cell               
d        2x2x2              32 cell   
(2)元胞数组的数据获得
从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{1,2}表示元胞数组中第一行第二列的元胞。
>> a={20,'matlab';ones(2,3),1:3}
a =
[        20]    'matlab'
[2x3 double]    [1x3 double]
>> str=a(1,2)
str =
'matlab'
>> class(str)
ans =
cell
>> str=a{1,2}
str =
matlab
>> class(str)
ans =
char
()和{}有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。
a =
[        20]    'matlab'   
    [2x3 double]    [1x3 double]
>> a{2,1}(2,2)
ans =
0.9134
>> a{2,1}(2,3)
ans =
0.0975
>> a{1,2}(2)
ans =
a
使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]
a =
[1]    [2]    [3]
[4]    [5]    [6]
[7]    [8]    [9]
>> b=a(2:3,2:3)
b =
[5]    [6]
[8]    [9]
>> c=a(1:3,2:3)
c =
[2]    [3]
[5]    [6]
[8]    [9]
本例使用元胞下标的方式创建了新的元胞数组bc,通过结果看出bc就是元胞数组a的一部分。
(3)元胞数组的删除和重塑
 要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵
即可。
a={20,'matlab';ones(2,3),1:3}
a =
[        20]    'matlab'   
    [2x3 double]    [1x3 double]
>> a(1,:)=[]
a =
[2x3 double]    [1x3 double]
>> a={20,'matlab';ones(2,3),1:3};
>> a{1}=[]
a =
          []    'matlab'   
    [2x3 double]    [1x3 double]
>> a(1)=[]
a =
[2x3 double]    'matlab'    [1x3 double]
>> a(2)=[]
a =
[2x3 double]    [1x3 double]
>> a(1,2)=[]
matlab数组赋值??? A null assignment can have only one non-colon index.
>> a(1)=[]
a =
[1x3 double]
6元胞数组变形
 元数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。   
>> a=cell(4,4)
a = []    []    []    []
    []    []    []    []
    []    []    []    []
    []    []    []    []
>> size(a)
ans =
 4    4
>> b=reshape(a,2,8)
b = []    []    []    []    []    []    []    []
    []    []    []    []    []    []    []    []
>> size(b)
ans =
 2    8
(5)元胞数组中的操作函数
  cell:创建空的元胞数组
  cellfun:为元胞数组的每个元胞执行指定的函数
  celldisp:显示所有元胞的内容
  cellplot:利用图形方式显示元胞数组
  cell2mat:将元胞数组转变成为普通的矩阵
  mat2cell:将数值矩阵转变成为元胞数组
  num2cell:将数值数组转变成为元胞数组
  deal:将输入参数赋值给输出
  cell2struct:将元胞数组转变成为结构
  struct2cell:将结构转变为元胞数组
  iscell:判断输入是否为元胞数组
>> a={20,'matlab',3-7i;ones(2,3),1:3,0}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。