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小时内删除。
发表评论