首页 > 代码库 > Matlab基础学习----------------元胞数组

Matlab基础学习----------------元胞数组

与架构数组类似,元胞数组也可以存放不同类型不同大小的数据,每个元素称为一个元胞(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基础学习----------------元胞数组