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维的尺⼨。
matlab数组赋值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程序设计》王⼴、邢林芳

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