跳转到内容

MATLAB 编程/数组/结构体数组

来自维基教科书,自由的教科书

结构体简介

[编辑 | 编辑源代码]

MATLAB 提供了一种用于结构化数据元素的方法。结构体的创建和访问方式与熟悉 C 语言编程的人员类似。

MATLAB 有多种方法来定义和访问结构体字段。有关更多详细信息,请参阅声明结构体。

注意:结构体字段名称必须以字母开头,区分大小写。名称的其余部分可以包含字母、数字和下划线字符。使用 namelengthmax 函数确定字段名称的最大长度。

声明结构体

[编辑 | 编辑源代码]

可以使用 struct 命令声明结构体。

   >> a = struct('b', 0, 'c', 'test')
   a = 
     b: 0
     c: 'test'

在 MATLAB 中,变量不需要在使用前显式声明。因此,可以使用 '.' 运算符声明结构体。

   >> a.c = 'test'
   a = 
     c: 'test'

结构体可以按需声明,字段也可以按需声明。

结构体数组

[编辑 | 编辑源代码]

结构体也可以是数组。以下是一个示例

   >> a = struct('b', 0, 'c', 'test');            % Create structure
   >> a(2).b = 1;                                 % Turn it into an array by creating another element
   >> a(2).c = 'testing'
        a =
          1x2 struct array with fields:
            b
            c
   >> a(1)                                        % Initial structure
        ans = 
          b: 0
          c: 'test'
   >> a(2)                                        % The second element
        ans = 
          b: 1
          c: 'testing'

访问字段

[编辑 | 编辑源代码]

当字段名称已知时,可以直接访问字段值。

   >> a.c
       ans =
         test
       ans =
         testing

在某些情况下,您可能需要动态访问字段,这可以通过以下方式完成。

   >> str = 'c';
   >> a(1).(str)
       ans =
         test
   >> a(1).c
       ans =
         test
         

访问数组元素

[编辑 | 编辑源代码]

可以使用数组索引访问结构体数组中的任何给定元素,例如

   >> a(1).c
       ans =
         test

要访问结构体数组中的所有元素,请使用语法 {structure.field}。要获取向量或数组中的所有值,请使用方括号 ([]),如下所示。

   >> [a.('c')]
       ans =
         testtesting
   >> [a.('b')]
       ans =
          0     1

或者,您可以将它们全部放入一个元胞数组(而不是将它们连接起来),如下所示

   >> {a.('c')}
   ans = {'test', 'testing'}

为每个结构体数组元素的字段赋值

[编辑 | 编辑源代码]

Matlab 提供了为每个数组元素的字段赋值的工具。考虑以下结构体数组

foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})

以下命令将相同的值分配给每个数组元素的 field_b 字段

value = 1;
[foo.field_b] = deal(value)

要将不同的值分配给每个数组元素

value = {4,8,12,16};
[foo.field_b] = value{:}

通过逻辑寻址进行子数组操作

[编辑 | 编辑源代码]

使用 Matlab,可以通过使用逻辑索引从数组中提取子数组。考虑以下结构体数组

   foo = struct('field_a',{1,2,3,4},'field_b',{4,8,12,16})

要从 foo 中获取一个子数组,其中所有 foo.field_a 值都等于 2,可以使用布尔数组执行逻辑索引。因此,用于此目的的返回布尔数组的布尔测试将是

   [foo.field_a] == 2

因此,通过使用此布尔数组执行逻辑索引,Matlab 定义了一个结构体数组,其元素由来自 foo 的那些元素组成,这些元素的 field_a 值等于 2,方法是

   foo([foo.field_a] == 2)
华夏公益教科书