前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MATLAB的struct语法解析及案例详解

MATLAB的struct语法解析及案例详解

作者头像
用户9925864
发布2024-06-04 11:11:38
发布2024-06-04 11:11:38
39700
代码可运行
举报
运行总次数:0
代码可运行

结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用 structName.fieldName 格式的圆点表示法来访问字段中的数据。

当您有数据要放入新的结构体中时,可以使用圆点表示法创建结构体,每次为结构体命名一个字段:

代码语言:javascript
代码运行次数:0
运行
复制
s.a = 1;
s.b = {'A','B','C'}
s = struct with fields:
    a: 1
    b: {'A'  'B'  'C'}

字段名称可以包含 ASCII 字母(A-Z、A-Z)、数字 (0-9) 和下划线,并且必须以字母开头。字段名称的最大长度为 namelengthmax。

也可以按如下所述,使用 struct 函数创建一个结构体数组。您可以同时指定许多字段,也可以创建一个非标量结构体数组。

struct语法

代码语言:javascript
代码运行次数:0
运行
复制
s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)

case1:在结构体中存储相关数据变量

在结构体的字段中存储相关数据片段。您可以为这些字段提供对数据进行描述的易读名称。

通过使用圆点表示法添加字段来创建一个结构体。这些字段包含正弦波的 x 值和 y 值以及描述数据的文本。

代码语言:javascript
代码运行次数:0
运行
复制
data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

绘制正弦波。您可以按字段名称引用 x 和 y 值的数组。然后添加标题。

代码语言:javascript
代码运行次数:0
运行
复制
plot(data.x,data.y)
title(data.title)

case2:具有一个字段的结构体

创建包含一个字段的非标量结构体。

代码语言:javascript
代码运行次数:0
运行
复制
field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s=3×1 struct array with fields:
    f

查看每个元素的内容。

代码语言:javascript
代码运行次数:0
运行
复制
s.f
ans = 
'some text'
ans = 1×3


    10    20    30


ans = 5×5


    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

访问非标量结构体的字段(例如 s.f)时,MATLAB® 返回一个逗号分隔的列表。在本示例中,s.f 等效于 s(1).f, s(2).f, s(3).f。

case3:具有多个字段的结构体

创建包含多个字段的非标量结构体。

代码语言:javascript
代码运行次数:0
运行
复制
field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};


s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s=1×2 struct array with fields:
    f1
    f2
    f3
    f4

value2 和 value3 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组。因为 value1 是数值数组而不是元胞数组,所以 s(1).f1 和 s(2).f1 具有相同的内容。类似地,因为 value4 的元胞数组具有单一元素,所以 s(1).f4 和 s(2).f4 具有相同的内容。

代码语言:javascript
代码运行次数:0
运行
复制
s(1)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'a'
    f3: 3.1416
    f4: 'fourth'


s(2)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'b'
    f3: 9.8696
    f4: 'fourth'

case4:包含元胞数组的字段

创建具有一个字段的一个结构体,该字段包含一个元胞数组。

代码语言:javascript
代码运行次数:0
运行
复制
field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
    mycell: {'a'  'b'  'c'}

case5:空结构体

创建包含多个字段的空结构体。

代码语言:javascript
代码运行次数:0
运行
复制
s = struct('a',{},'b',{},'c',{})
s = 


  0x0 empty struct array with fields:


    a
    b
    c

为空结构体中的字段赋值。

代码语言:javascript
代码运行次数:0
运行
复制
s(1).a = 'a'
s = struct with fields:
    a: 'a'
    b: []
    c: []
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档