与架构数组类似,元胞数组也可以存放不同类型不同大小的数据,每个元素称为一个元胞(cell)。
(1)元胞数组的创建
三种方法:直接赋值法,利用函数cell()和利用{}直接创建元胞数组的所有单元。
实例:
%1、直接赋值法
%通过赋值语句将值赋到单元数组的一个单元中,每次只能创建一个单元内容;
%有两种赋值方法:内容索引法和单元索引法
%(1)内容索引法:赋值语句左边用大括号将单元的下表括起来,右边为单元内容
%实例:创建一个2*2的元胞数组
c{1,1}='this is a cell array';%字符串
c{1,2}=[1,2,3,4,5;6,7,8,9,0];%矩阵
c{2,1}=[];
c{2,2}=4+3*i;%复数
class(c) %判断的数据类型
%运行结果:
% ans =
% cell
%
% c
% c =
%
% 'this is a cell array' [2x5 double]
% [] [4.0000 + 3.0000i]
%(2)单元索引法:赋值语句左边用()将单元的下表括起来,右边为单元内容,用{}
%实例:创建一个2*2的元胞数组
c(1,1)={'this is a cell array'};%字符串
c(1,2)={[1,2,3,4,5;6,7,8,9,0]};%矩阵
c(2,1)={[]};
c(2,2)={4+3*i};%复数
%运行结果相同
%2、cell()函数创建法
%cell()函数可以创建元胞数组,而且还可以指定大小
%语法:cell_array=cell(m,n) 创建m*n的元胞数组,定义之后可以用赋值法对其进行赋值
%3、用{}直接创建元胞数组
%在大括号中依次列出所需创建元胞数组的内容,之间用逗号隔开,行与行之间用分号隔开
%实例:创建一个2*3的元胞数组
cell={['this','is','s','cellarray'] , [1,2] , [] ; 2+3*i , 4 , eye(4)}
class(cell)
%运行结果:
% cell =
% 'thisisscellarray' [1x2 double] []
% [2.0000 + 3.0000i] [ 4] [4x4 double]
%
% ans =
% cell(2)元胞数组的访问
%元胞数组的访问
%方式有两种:
%(1)用()将下标括起来访问其单元的结构类型
%(2)用{}将下标括起来访问其单元的具体内容
%在cell元胞数组的基础上编写实例:
cell
a=cell(1,1)
A=cell{1,1}
b=cell(1,2)
B=cell{1,2}
%运行结果
% cell =
% 'thisisscellarray' [1x2 double] []
% [2.0000 + 3.0000i] [ 4] [4x4 double]
% a =
% 'thisisscellarray'
% A =
% thisisscellarray
% b =
% [1x2 double]
% B =
% 1 2
%利用celldisp()函数对元胞数组的所有单元内容进行访问
celldisp(cell)
%结果:
% cell{1,1} =
% thisisscellarray
% cell{2,1} =
%
% 2.0000 + 3.0000i
% cell{1,2} =
% 1 2
% cell{2,2} =
% 4
% cell{1,3} =
% []
% cell{2,3} =
% 1 0 0 0
% 0 1 0 0
% 0 0 1 0
% 0 0 0 1(3)元胞数组的基本操作
包含元胞数组的访问、元胞数组的扩展、缩小、嵌套等操作
%1、元胞数组的扩展
%利用赋值法进行扩展实例
cell
cell{3,2}=['这是扩展内容'] %自动扩展为3*3阵列,未赋值的部分为[]
% %运行结果:
% cell =
% 'thisisscellarray' [1x2 double] []
% [2.0000 + 3.0000i] [ 4] [4x4 double]
% cell =
% 'thisisscellarray' [1x2 double] []
% [2.0000 + 3.0000i] [ 4] [4x4 double]
% [] '这是扩展内容' []
%2、元胞数组的缩小
%通过对要删除的单元赋空值的方式来删除数组的行或者列
%语法:
%(1)删除行:cellname(行号,:)=[]
%(1)删除列:cellname(:,列号)=[]
%实例
cell(2,:)=[] %删除第二行
cell(:,1)=[] %再删除第一列
%结果:
% cell =
% 'thisisscellarray' [1x2 double] []
% [] '这是扩展内容' []
% cell =
% [1x2 double] []
% '这是扩展内容' []
%3、元胞数组的嵌套
%元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。
%使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,
%另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。
%实例
a=cell(2,2);
a{1,1}=12;
a{1,2}{1,1}=[1,2];%元胞数组嵌套
a{2,1}='元胞数组嵌套';
a{2,2}=[1,2,3;4,5,6]
cellplot(a) %画出单元阵列的结构图
%结果:
% a =
% [ 12] {1x1 cell }
% '元胞数组嵌套' [2x3 double](4)元胞数组的操作函数
celldisp()显示单元阵列的内容
cellplot()画出单元阵列的结构图
%reshape()改变元胞数组的形状
reshape(a,1,4) %在上面例子的基础上将元胞数组a由2*2改为1*4
%结果:
% ans =
% [12] '元胞数组嵌套' {1x1 cell} [2x3 double]
%cell2struct()将元胞数组转化为架构数组
%num2cell()将数字矩阵转化为元胞数组
num=[1,2,3;4,5,6];
cell_num=num2cell(num) %数字矩阵转化为元胞数组
class(cell_num)%判断类型
iscell(cell_num)%判断是否是元胞数组
%运行结果:
% cell_num =
%
% [1] [2] [3]
% [4] [5] [6]
% ans =
% cell
% ans =
1
%cellstr()将二维字符数组转化成字符串单元阵列
S = ['abc '; 'defg'; 'hi '];
c = cellstr(S)
%结果
% c =
% 'abc'
% 'defg'
% 'hi'
%
% class(c)
% ans =
% cell
%char()将字符串单元阵列转化为相应的字符数组Matlab基础学习----------------元胞数组
原文地址:http://blog.csdn.net/z1137730824/article/details/39206823