MATLAB编程-简介
结构体简介(Introduction to Structures)
MATLAB 提供了一个用于结构化数据元素的方式。结构体的创建和访问方式对于熟悉 C 语言编程的人来说是非常熟悉的。
MATLAB 有多种方式定义和访问结构体字段。请参阅《声明结构体》部分获取更多详细信息。
注意:结构体字段名称必须以字母开头,并且区分大小写。字段名称的其余部分可以包含字母、数字和下划线字符。使用 namelengthmax
函数可以确定字段名称的最大长度。
声明结构体(Declaring Structures)
可以使用 struct
命令声明结构体:
>> a = struct('b', 0, 'c', 'test')
a =
b: 0
c: 'test'
在 MATLAB 中,变量在使用之前不需要显式声明。因此,结构体可以使用 .
操作符声明字段:
>> a.c = 'test'
a =
c: 'test'
结构体和字段都可以根据需要声明。
结构体数组(Arrays of Structures)
结构体也可以是数组。以下是一个示例:
>> a = struct('b', 0, 'c', 'test'); % 创建结构体
>> a(2).b = 1; % 通过创建另一个元素将其变成数组
>> a(2).c = 'testing'
a =
1x2 struct array with fields:
b
c
>> a(1) % 初始结构体
ans =
b: 0
c: 'test'
>> a(2) % 第二个元素
ans =
b: 1
c: 'testing'
访问字段(Accessing Fields)
当字段名称已知时,可以直接访问字段值:
>> a.c
ans =
test
ans =
testing
在某些情况下,你可能需要动态地访问字段,可以通过以下方式实现:
>> str = 'c';
>> a(1).(str)
ans =
test
>> a(1).c
ans =
test
访问数组元素(Accessing Array Elements)
结构体数组中的任何给定元素都可以通过数组索引访问:
>> a(1).c
ans =
test
要访问结构体数组中的所有元素,可以使用 {structure.field}
语法。为了获取向量或数组中的所有值,使用方括号([]
)如下所示:
>> [a.('c')]
ans =
testtesting
>> [a.('b')]
ans =
0 1
你也可以将它们放入一个单元格数组中,而不是将它们连接起来:
>> {a.('c')}
ans = {'test', 'testing'}
给每个结构体数组元素的字段赋值(Assigning Values to a Field of Each Struct Array Element)
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{:}
通过逻辑索引提取子数组(Sub-arrays through Logical Addressing)
在 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)
这是 MATLAB 中结构体的创建、访问和操作的基础知识。