matlab的元胞数组

在Matlab中,元胞数组是一种特殊数据类型,可以将元胞数组看作一种无所不包的通用矩阵(广义矩阵),组成元胞数组的元素可以是任何一种数据类型的常数或常量。
数据类型可以是字符串、双精度数、稀疏矩阵、元胞数组、结构或者其他matlab数据类型,每一个元胞数据可以是标量、向量、矩阵、N维数组,每一个元素可以具有不同的尺寸和内存空间,内容可以完全不同,元胞数组的元素叫做元胞,元胞数组的内存空间是动态分配的,元胞数据的维数不受限制,访问元胞数据可以单下标方式或全下标方式。
元胞数组的创建主要有以下几种方法:
1.使用运算花括号{},将不同类型和尺寸的数据组合在一起构建一个元胞数组;
2.将数组的每一个元素用{}括起来,然后再用数组创建的符号[]将数组的元素括起来构成一个元胞数组;
3.用{}创建一个元胞数组,Matlab能够自动扩展数组的尺寸,没有明确赋值的元素作为空元胞数组存在;
4.用函数cell创建元胞数组。该函数可以创建一维、二维或者多维元胞数组,但创建的数组都为空元胞。
元胞数组的基本操作:
元胞数组的基本操作包括对元胞和元胞数据的访问、修改、元胞数组的扩展、收缩或者重组。操作数值的函数也可以应用在元胞数组上。
在Matlab中元胞数组的访问有以下几种方法:
1.可以使用圆括号()直接访问元胞数组的元胞,获取的数据也是一个元胞数组;
2.使用花括号{}直接访问元胞数组的元胞,获取的数据是字符串;
3.将花括号{}和圆括号()结合起来使用访问元胞元素内部的成员。
元胞元素的扩充、收缩和重组均与数值数组大体相同。

A=[{zeros(2,2,2)},{'word'},{15.36},{1:100}]
B=A(1,2)
class(B)
whos
A = 
    [2x2x2 double]    'word'    [15.3600]    [1x100 double]
B = 
   'word'
ans =
cell
  Name      Size            Bytes  Class    Attributes
  A         1x4              1328  cell               
  B         1x1               120  cell               
  ans       1x4                 8  char                   
A=[{zeros(2,2,2)},{'word'};{15.36},{1:10}]
B=A{1,2}(2)
C=A{2,2}(5:end)
class(C)
F=A{4}([1 3 5])
whos
A = 
    [2x2x2 double]    'word'        
    [     15.3600]    [1x100 double]
B =
o
C =
     5     6     7     8     9    10
ans =
double
F =
     1     3     5
  Name      Size            Bytes  Class     Attributes
  A         2x2              1328  cell                
  A1        1x1                 8  double              
  A2        1x1                 8  double              
  A3        1x1                 8  double              
  B         1x1                 2  char                
  C         1x96              768  double              
  F         1x3                24  double              
  ans       1x6                12  char     

元胞数组的扩充示例:

A=[{zeros(2,2,2)},{'word'};{15.36},{1:10}]
B=cell(2)
B(:,1)={char('hello','Welcome');10:-1:5}
C =[A,B]
D=[A,B,C]
whos
A = 
    [2x2x2 double]    'word'       
    [     15.3600]    [1x10 double]
B = 
    []    []
    []    []
B = 

    [2x7 char  ]    []
    [1x6 double]    []
C = 
    [2x2x2 double]    'word'           [2x7 char  ]    []
    [     15.3600]    [1x10 double]    [1x6 double]    []


D = 

    [2x2x2 double]    'word'           [2x7 char  ]    []    [2x2x2 double]    'word'           [2x7 char  ]    []
    [     15.3600]    [1x10 double]    [1x6 double]    []    [     15.3600]    [1x10 double]    [1x6 double]    []

  Name      Size            Bytes  Class     Attributes

  A         2x2               608  cell                
  A1        1x1                 8  double              
  A2        1x1                 8  double              
  A3        1x1                 8  double              
  B         2x2               316  cell                
  C         2x4               924  cell                
  D         2x8              1848  cell                
  F         1x3                24  double              
  ans       1x6                12  char   

元胞数组的操作函数:

函数 说明
cell 创建空的元胞数组
cellfun 为元胞数组的每个元胞执行指定的函数
celldisp 显示所有元胞的内容
cellplot 利用图形方式显示元胞数组
cell2mat 将元胞数组转化为普通矩阵
mat2cell 将普通的值矩阵转变为元胞数组
num2cell 将数值数组转变为元胞数组
deal 将输入参数赋值给输出
cell2struct 将元胞数组转变为结构
struct2cell 将结构转变为元胞数组
iscell 判断输入是否为元胞数组

cellfun函数主要功能是为元胞数组的每个元素(元胞)分别指定不同的函数,在cellfun函数中可用的函数如下表:

函数 说明
isempty 若元胞为空,则返回逻辑真
islogical 若元胞元素为逻辑类型,则返回逻辑真
isreal 若元胞元素为实数,则返回逻辑为真
length 元胞元素的长度
ndims 元胞元素的维数
prodofsize 元胞元素包含的元素个数

cellfun函数还有以下两种用法:
cellfun(‘size’,C,K)用于获取元胞数组元素第K维的尺寸。
cellfun(‘isclass’,C,classname)用于判断元胞数组的数据类型。
用法如下:

A={rand(2,2,2),'word',pi,17,1+i,magic(5)}
B=cellfun('isreal',A)
C=cellfun('length',A)
A = 
    [2x2x2 double]    'word'    [3.1416]    [17]    [1.0000 + 1.0000i]    [5x5 double]
B =
     1     1     1     1     0     1
C =
     2     4     1     1     1     5
D={[1] [2 3 4];[5;9] [6 7 8; 10 11 12]}
E=cell2mat(D)
D = 
    [         1]    [1x3 double]
    [2x1 double]    [2x3 double]
E =
     1     2     3     4
     5     6     7     8
     9    10    11    12
D=[1 2 3 4; 5 6 7 8; 9 10 11 12]
E=mat2cell(D,[1, 2],[1,3])

D =
     1     2     3     4
     5     6     7     8
     9    10    11    12
E = 
    [         1]    [1x3 double]
    [2x1 double]    [2x3 double]

参考:《MATLAB GUI程序设计》王广、邢林芳

你可能感兴趣的:(matlab,数据结构)