找回密码
 注册
关于网站域名变更的通知
查看: 407|回复: 2
打印 上一主题 下一主题

MATLAB中的结构数组

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-24 13:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
5 b7 H, s1 U7 l' Y1 J. \' G$ z7 m% q+ }

结构数组:

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

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

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


. |8 ~6 Q; ^- j

>> employee.name='tiger';% |$ S1 t0 @0 R5 e- u* `
>> employee.sex='male';$ M& W0 [" z/ l/ ^- o! B2 A; K7 ?
>> employee.age='24';
0 \) G. H% Q% i. Q8 d7 I( D>> employee.number='12345';  V9 b: l( |7 U0 e& e. t$ C, T# A9 R
>> employee

employee =

      name: 'tiger'
* H2 f/ w! b% c. C3 ^* `0 r& w1 ]       sex: 'male'" q+ s/ }0 E( `/ U7 O" |9 Z
       age: '24'7 `0 S! y9 Y$ B  o1 ~9 l1 t
    number: '12345'

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


( s2 Y( I* c9 Z$ K9 j

>> employee(2).name='lee';7 h! j8 G7 ?8 p3 w8 d3 F# ?  @
>> employee(2).sex='female';
; x1 J( a1 x& ~* S0 f>> employee(2).age='32';3 V' h, X' G  F' `4 n/ W! T
>> employee(2).number='82356';1 @7 A9 q5 i' a/ A( R! t% G- X& o
>> employee(2)

ans =

      name: 'lee'& t( F. A8 E3 P$ r
       sex: 'female'+ [5 L# n9 `, R  F
       age: '32'
9 a: F. D8 u: x    number: '82356'


0 J" m0 }7 N# J8 M* ?' b" n) A5 a+ M

> employee

employee =

1x2 struct array with fields:
+ E  [! b- ?% `$ Q8 u2 U* C    name$ k5 C' v0 A) ]  ]& i
    sex
# L* y. s# S7 w( z' |' L( |5 c    age
- w3 w3 e5 D# X1 f% M    number


# M0 `) `, o. i$ W, |7 d9 p4 Y

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

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

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

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

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

1 w$ g" ~- k4 ^5 y5 s; S) z" ]* I

>> list.ID=123;# f1 p- u# V8 M* Z9 q) j9 \3 `' G: s
>> list.sex='male';
7 U( A2 Q/ O" Y, B& G( f* o8 H>> list.age=25;% R* `5 d$ j8 w) m" b. Z  d/ O
>> list

list =

     ID: 123
1 y, U0 g# x( P9 t    sex: 'male'# h7 J9 V& I. [. U5 T6 R3 g5 U
    age: 25

>> list(2).ID=456;
) n! r& p+ M) @>> list(2).sex='female';: d: k5 _" h8 m8 p5 X# E
>> list(2).age=32;;
2 s3 K% E& u, ]* ]>> list2=list(1:2)

list2 =

1x2 struct array with fields:
2 S) H) x8 q& l7 @1 X    ID
( d  N) \3 I( j    sex
2 c$ w# P& Y& m9 H% q& o; m    age

8 w7 W, b0 G) D# y# S1 T

>> list2(1)

ans =

     ID: 123
2 |' g, _1 R( I    sex: 'male'
- D7 ^6 C. `& g( b    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32

* S4 n: ^9 k" Y3 c7 ]
5 A" Q' ^' f% F3 T! G6 Q. b

% _& b- t( k2 u# s  E

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
, P+ z* g  X9 E0 W( g5 h7 G>> student

student =

1x2 struct array with fields:
2 I6 [6 c, F$ G6 g    name
. n3 W- g# \' Q1 ^$ S! R  r" e: v    age& `% X8 G3 K! X7 m
    ID
; S: t! [$ x( a+ M8 E7 k& O1 {6 r    score

>> student(2).score

ans =

    7.9221    0.3571    6.78740 W* r& r6 m6 W" ~! v0 @
    9.5949    8.4913    7.57741 `3 G+ W* R' J! C! P9 c1 k; z: z, s
    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


) H$ u) E( C- l8 t2 {4 bans =

bbb

>> student.('name')

ans =

aaa


) I  @1 S( F* I  R7 n3 Kans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


& `9 l0 S7 A, r3 V. P; k6 a+ r: W% m

>> 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], D$ f& I- }9 K2 r0 o& ?3 r2 V
    nest: [1x1 struct]

    添加元素


& T) K( Y+ A2 Q, t: W: X$ r

>> A(2).data=[1 3 3;4 5 5];
/ d. p) q# X, x' F# j2 m8 D8 q>> A.data

ans =

     1     2     3
/ H3 Y* q5 K2 R/ O     4     5     6


9 {/ `4 t4 z* u7 |% g0 aans =

     1     3     3
1 f% V3 y8 `) W7 Z4 Q- p     4     5     5

>> A(2).nest.testnum='test2';7 T8 z$ w8 K( z" j
>> A(2).nest.xdata=[4 3 2];% Y6 M9 d2 g3 j% M& a" P  R
>> A(2).nest.ydata=[6 9 8];" ]8 M" h) u6 G
>> A.nest

ans =

    testnum: 'test'
9 P$ i3 V( L7 t5 B      xdata: [7 8 9]) S6 U! _" K1 a  Z# N/ F/ U
      ydata: [10 11 12]


9 f1 B" }& B) T( e- h' nans =

    testnum: 'test2'. p, c3 ^% ~! X8 }1 ]6 F
      xdata: [4 3 2]
. b. [' r( y: E$ o( l, N+ `, t      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata

- i% B$ v3 @+ J! n

该用户从未签到

2#
发表于 2020-4-24 15:01 | 只看该作者
MATLAB中的结构数组

该用户从未签到

3#
发表于 2020-4-26 15:34 | 只看该作者

  N  F. d. ~/ C2 v" w4 u/ E, jMATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 11:34 , Processed in 0.171875 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表