【005.Matlab基础 单元数组与结构体 】

单元数组和结构体的区别在于,结构体中的数据存储并不是由数字来标示的,而是通过结构体中的名称进行标示的。
单元数组的创建和操作
单元数组中每一个元素成为单元(cell),单元中可以包含任何类型的MATLAB数据,即可以是数组、字符、符号对象、单元数组或结构体等。
创建方法:


  • 赋值语句直接创建
    • 按单元索引法
      • 采用标准数组的赋值方法,赋给单元的数值通过花括号({})将单元内容括起来。
    • 按内容索引法
      • 将花括号写在等号左边,即放在单元数组名称后
  • 通过cell函数首先为单元数组分配内存空间,然后再对每个单元进行赋值

如果工作空间内的某个变量名与所创建的单元数组同名,那么此时则不会对单元数组赋值。
>> clear A %保证赋值单元数组名称不重名
>> %按单元索引法赋值
>> A(1,1)={[1 3 4;2 4 6;1 4 7]};
>> A(1,2)={3+5i};
>> A(2,1)={'Nishad in Huai’an'}; 
>> A(2,2)={0:pi/5:pi};
>> A
A = 
           [3x3 double]    [3.0000 + 5.0000i]
    'Nishad in Huai’an'          [1x6 double]

>> %按内容索引法赋值
>> B{1,1}=[1 2 3;4 5 6;7 8 9];
>> B{1,2}=2+3i;
>> B{2,1}='I Love China';
>> B{2,2}=1:2:13;
>> B
B = 
      [3x3 double]    [2.0000 + 3.0000i]
    'I Love China'          [1x7 double]

按单元索引法和按内容索引法所创建的单元数组是等效的。但需要注意的是,用花括号可以访问单元数组单元内容,而圆括号则只用于单元数组的单元而不显示单元数组单元的内容。如果需要将单元数组的所有内容都显示出来,则可以采用celldis函数来强制显示单元数组的所有内容。

>> B(2,2) %圆括号只用于表示单元而不显示内容
ans = 
    [1x7 double]
>> B{2,2}
ans =
     1     3     5     7     9    11    13
>> A{2,:}
ans =
Nishad in Huai’an
ans =
         0    0.6283    1.2566    1.8850    2.5133    3.1416
>> A(2,:)
ans = 
    'Nishad in Huai’an'    [1x6 double]

通过cell函数为单元数组赋值

>> D=cell(2,3)
D = 
    []    []    []
    []    []    []
>> D{1,1}=randperm(5)
D = 
    [1x5 double]    []    []
              []    []    []
>> celldisp(D)
D{1,1} =
     3     5     1     2     4
D{2,1} =
     []
D{1,2} =
     []
D{2,2} =
     []
D{1,3} =
     []
D{2,3} =
     []

单元数组函数

函数说明
cell生成一个空的单元数组,然后向其中添加数据
celldisp显示单元数组的所有单元的内容
iscell判断是否为单元数组
isa判断是否为单元数组的一个单元
deal将多个单元的数据取出来后赋予一个独立的单元数组变量
cellfun将一个指定的函数应用到一个单元数组的所有单元
num2cell从数组中提取指定元素,填充到单元数组
>> a=randn(3,4)
a =
    0.6277   -0.8637   -1.1135   -0.7697
    1.0933    0.0774   -0.0068    0.3714
    1.1093   -1.2141    1.5326   -0.2256
>> b=num2cell(a,1)
b = 
    [3x1 double]    [3x1 double]    [3x1 double]    [3x1 double]
>> celldisp(b)
b{1} =
    0.6277
    1.0933
    1.1093
b{2} =
   -0.8637
    0.0774
   -1.2141
b{3} =
   -1.1135
   -0.0068
    1.5326
b{4} =
   -0.7697
    0.3714
   -0.2256
>> b=num2cell(a,2)
b = 
    [1x4 double]
    [1x4 double]
    [1x4 double]
>> celldisp(b)
b{1} =
    0.6277   -0.8637   -1.1135   -0.7697
b{2} =
    1.0933    0.0774   -0.0068    0.3714
b{3} =
    1.1093   -1.2141    1.5326   -0.2256
>> b=num2cell(a)
b = 
    [0.6277]    [-0.8637]    [-1.1135]    [-0.7697]
    [1.0933]    [ 0.0774]    [-0.0068]    [ 0.3714]
    [1.1093]    [-1.2141]    [ 1.5326]    [-0.2256]
>> 

结构体创建
结构体(structure)和单元数组非常相似,结构体通过字段(fields)来对元素进行索引
创建方法:

  • 直接赋值
  • 通过struct函数创建
>> data1={3.0,5.0,'sqrt(7)'};
>> data2={[0,0] [1 1] [3 5]};
>> data3={'--' '...' '-.-'};
>> data4={'red' 'bule' 'yellow'};
>> data5={'yes' 'no' 'no'};
>> circle2=struct('radius',data1,'center',data2,'linstyle',data3,...
                  'color',data4,'filled',data5)
circle2 = 
1x3 struct array with fields:
    radius
    center
    linstyle
    color
    filled

结构体函数

函数说明
获取多个结构体数组元素的值
cat提取结构体数据后依次排列
deal提取多个元素的数值赋予不同的变量,或对结构体字段赋值
fieldnames返回结构体字段名
isfield判断一个字段名是否为指定结构体中的字段名
class判断一个变量是否为结构体变量,输出类型名
isstruct判断一个变量是否为结构体变量
orderfield对结构体字段进行排序
>> center=cat(1,circle2.center) %提取结构体数据后依次排列
center =
     0     0
     1     1
     3     5
>> [c1,c2,c3]=deal(circle2.color)
c1 =
red
c2 =
bule
c3 =
yellow
>> [circle2.radius]=deal(13, 27,36)
circle2 = 
1x3 struct array with fields:
    radius
    center
    linstyle
    color
    filled
>> circle2.radius
ans =
    13
ans =
    27
ans =
    36
>> fieldnames(circle2)
ans = 
    'radius'
    'center'
    'linstyle'
    'color'
    'filled'
>> isfield(circle2,'center')
ans =
     1
>> orderfields(circles)
Undefined function or variable 'circles'. 
Did you mean:
>> orderfields(circle2)
ans = 
1x3 struct array with fields:
    center
    color
    filled
    linstyle
    radius
>> circle_new=rmfiled(circle2,'filled')
Undefined function or variable 'rmfiled'. 
Did you mean:
>> circle_new=rmfield(circle2,'filled')
circle_new = 
1x3 struct array with fields:
    radius
    center
    linstyle
    color

下一节 字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值