zoukankan      html  css  js  c++  java
  • MATLAB中的结构数组

    MATLAB中的结构数组

    结构数组:

        结构是包含一组记录的数据类型,而记录则是存储在相应的字段中。结构的字段可以是任意一种MATLAB数据类型的变量或者对象。结构类型的变量也可以是一维的、二维的或多维的数组。结构数组也称为架构数组。不过,在访问结构类型数据的元素时,需要使用下标配合字段的形式。

        可以在一个数组中放置各类的数据,并且一个结构数组还能是另一个结构数组的一部分。相比较而言,比元胞数组更为强大,也更加富于变化。

        (1)直接赋值法创建结构数组

        

    >> employee.name='tiger';
    >> employee.sex='male';
    >> employee.age='24';
    >> employee.number='12345';
    >> employee

    employee =

          name: 'tiger'
           sex: 'male'
           age: '24'
        number: '12345'

         employee是一种结构。可以容纳更多的元素,可以自由地向结构中加入元素。

         

    >> employee(2).name='lee';
    >> employee(2).sex='female';
    >> employee(2).age='32';
    >> employee(2).number='82356';
    >> employee(2)

    ans =

          name: 'lee'
           sex: 'female'
           age: '32'
        number: '82356'

          

    > employee

    employee =

    1x2 struct array with fields:
        name
        sex
        age
        number

      (2)用struct函数创建结构数组

      使用struct函数,可以根据指定的字段及其相应的值创建结构体数组。此函数的一般形式为:

      str_array=struct('field1',{val1},'field2',{val2}...);

      (3)结构数组中的数据获取

      使用结构数组索引,能获取结构数组中的任何字段值或字段元素。相似地,可以给任何字段或字段单元赋值。在结构数组名后面添加索引范围,可以获取子数组。

      

    >> list.ID=123;
    >> list.sex='male';
    >> list.age=25;
    >> list

    list =

         ID: 123
        sex: 'male'
        age: 25

    >> list(2).ID=456;
    >> list(2).sex='female';
    >> list(2).age=32;;
    >> list2=list(1:2)

    list2 =

    1x2 struct array with fields:
        ID
        sex
        age

    >> list2(1)

    ans =

         ID: 123
        sex: 'male'
        age: 25

    >> str=list2.sex

    str =

    male

    >> ages=[list.age]

    ages =

        25    32

        

        

        

    (4)结构数组中的操作

    对于结构的基本操作其实是对结构数组元素包含记录的操作。主要有结构记录数据的访问、字段的增加和删除等。访问结构数组元素包含记录的方法很简单,直接使用结构数组的名臣和字段的名臣以及操作符“.”完成相应的操作即可。不过,在访问结构数组的元素时,可以使用所谓的“动态”字段的形式。

    Struct_name.(expression)

    >> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
    >> student

    student =

    1x2 struct array with fields:
        name
        age
        ID
        score

    >> student(2).score

    ans =

        7.9221    0.3571    6.7874
        9.5949    8.4913    7.5774
        6.5574    9.3399    7.4313

    >> student(1).score(1,:)

    ans =

        9.6489    9.5717    1.4189

    >> student.name

    ans =

    aaa


    ans =

    bbb

    >> student.('name')

    ans =

    aaa


    ans =

    bbb

    (5)结构操作函数

    struct:创建结构或将其他数据类型转变成结构

    fieldnames:获取结构的字段名称

    getfield:获取结构的字段数据

    setfield:设置结构的字段数据

    rmfield:删除结构的指定字段

    isfield:判断给定的字符串是否为结构的字段名称

    isstruct:判断给定的数据对象是否为结构类型

    orderfields:将结构字段排序

    (6)结构数组的大小

        使用size函数可以获取结构数组或任何结构字段的大小。给定一个结构数组名作为变量,size返回一个数组的维向量。给定array(n).field形式的变量,size函数返回一个包含字段内容大小的向量。

    (7)结构数组的嵌套

        一个结构字段能包含另外一个结构,甚至是另外的结构数组。一旦创建了一个结构,就可以使用struct函数或赋值语句,在已经存在的结构字段中嵌套结构。

        要创建嵌套的的结构有两种方法:一维勇struct函数创建嵌套结构;二是索引嵌套的结构:

        struct函数创建嵌套结构:

        

    >> A=struct('data',[1 2 3;4 5 6],'nest',struct('testnum','test','xdata',[7 8 9],'ydata',[10 11 12]))

    A =

        data: [2x3 double]
        nest: [1x1 struct]

        添加元素

        

    >> A(2).data=[1 3 3;4 5 5];
    >> A.data

    ans =

         1     2     3
         4     5     6


    ans =

         1     3     3
         4     5     5

    >> A(2).nest.testnum='test2';
    >> A(2).nest.xdata=[4 3 2];
    >> A(2).nest.ydata=[6 9 8];
    >> A.nest

    ans =

        testnum: 'test'
          xdata: [7 8 9]
          ydata: [10 11 12]


    ans =

        testnum: 'test2'
          xdata: [4 3 2]
          ydata: [6 9 8]

    >>

    要索引嵌套的结构,用.标记添加嵌套的字段名。索引表达式中的第一个文本字符串确认结构数组,后面的表达式获取包含其他结构的字段名。

    A(1).nest

    A(2).nest.xdata

  • 相关阅读:
    二分练习题4 查找最接近的元素 题解
    二分练习题5 二分法求函数的零点 题解
    二分练习题3 查找小于x的最大元素 题解
    二分练习题2 查找大于等于x的最小元素 题解
    二分练习题1 查找元素 题解
    code forces 1176 D. Recover it!
    code forces 1173 B. Nauuo and Chess
    code forces 1173 C. Nauuo and Cards
    吴恩达深度学习课程笔记-15
    吴恩达深度学习课程笔记-14
  • 原文地址:https://www.cnblogs.com/yymn/p/4630526.html
Copyright © 2011-2022 走看看