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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
+ S$ m% G: v, r' ^# [+ ^  {) t7 Y$ i
0 L+ f' i* |+ O9 t8 Y: n: ?# I

结构数组:

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

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

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

, |, G* R0 L  t& j

>> employee.name='tiger';. o# V1 C  n! q2 o- N
>> employee.sex='male';4 M; V' M7 Q& F% e* W4 [. C
>> employee.age='24';4 H3 o( C# S2 a* ~& ?
>> employee.number='12345';
) R: ^# B+ i, S9 X3 {& z, @" R>> employee

employee =

      name: 'tiger'
/ u# j( ^# ~( i4 h) `$ ~3 `       sex: 'male'$ ?/ Q; `& _" o) Y( \0 F
       age: '24'
8 Q& c) L" u6 z, i$ o, D8 h: Y5 n    number: '12345'

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

0 G7 \; a& U3 y1 Q& h

>> employee(2).name='lee';3 ]' x$ y5 y6 i, Z
>> employee(2).sex='female';
$ e" \+ Z1 ]7 t3 D0 e$ \6 _>> employee(2).age='32';- g& ^7 e' V. I- B! G
>> employee(2).number='82356';3 ?! K1 N( @5 w  R7 h# n
>> employee(2)

ans =

      name: 'lee'6 @: Z: D! E; ~$ E" }7 ?4 M- `  w
       sex: 'female'( W; t$ {3 Y% }1 ]; d+ Z
       age: '32'
. ]" v" Q" i* B3 ^$ i+ R6 ~8 L5 `    number: '82356'

- @! {! d* ]( [% I7 c  W* N

> employee

employee =

1x2 struct array with fields:$ M- _6 t# y% `5 K- B1 d2 Y! `
    name
* p0 l8 p) L9 P) V. y+ M! J    sex4 S0 ]& u5 U( U3 s
    age' I7 C8 |4 e6 Y/ D6 w+ J6 n5 X
    number

# K% W4 r. W9 x5 }

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

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

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

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

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


8 A& o0 ?. [  i% Z  u! ^

>> list.ID=123;7 z- j0 B) M7 b# ~
>> list.sex='male';) l0 L" Q) r. Y4 K  s+ B* G0 x
>> list.age=25;
& {0 N- I( d# a7 ]7 P; ~) E  h>> list

list =

     ID: 1237 Y2 a& v2 N) P( k
    sex: 'male'6 r# N$ A8 A" j& @; T* o
    age: 25

>> list(2).ID=456;
6 \2 E3 V1 G! t4 o, A+ J: n: k4 S>> list(2).sex='female';
  K: {( a# @/ V" O# O+ E$ j>> list(2).age=32;;
- Q6 h% P0 A" p! j8 }" r* i; B>> list2=list(1:2)

list2 =

1x2 struct array with fields:  _; M) p/ T4 a" j. ~$ ?. R
    ID( F. @1 j( O: B" d. w" Z
    sex
6 r2 F1 k8 `7 f2 j6 r7 q    age


- b9 T1 a. j" A

>> list2(1)

ans =

     ID: 123
/ E7 G/ K+ q" \. M7 v" E. h; {6 O5 ]    sex: 'male'' _" S7 y5 F+ Z" N6 F( f
    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


2 h* n, B1 {6 d8 N, h
; n$ I' |8 l2 U' v8 k, `, L, \0 c: r) ~/ \& X% ?8 y* G

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});- g5 J+ s/ |- X$ U3 v& ]
>> student

student =

1x2 struct array with fields:
3 X& |3 K; W7 t3 g  Z3 ]7 B( Q    name& @; _4 w1 H. {9 V3 y8 d
    age
9 X3 X; T* b) x( G    ID4 {% l/ K7 w$ a( R6 r
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
% C; O# {% x( F- o- y    9.5949    8.4913    7.5774
) c: Z( K4 f4 ?  |    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


! X  k, W) E. \6 s# c7 U" @, @4 Dans =

bbb

>> student.('name')

ans =

aaa


5 k" N1 {+ b) u% ~5 ]! |% W+ Fans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:

: ]5 L% x  V) n6 P9 F

>> 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]' F4 ^$ j6 I9 T" t5 ?  v, E1 a
    nest: [1x1 struct]

    添加元素


' Q) Q) k9 Z7 i  ~; K( p5 `

>> A(2).data=[1 3 3;4 5 5];
# X  m; ^4 Z3 o( @2 E, B% B>> A.data

ans =

     1     2     32 ~8 w* |9 r; I$ l* ~1 {% }8 t& X
     4     5     6

4 J+ w, o( R6 v2 B$ Y, G) j6 L: \
ans =

     1     3     3
. |1 m) }" v+ m# p4 U     4     5     5

>> A(2).nest.testnum='test2';- M/ q/ {* W1 ~( Q  j; B1 o
>> A(2).nest.xdata=[4 3 2];( j! s$ _8 F/ f# U. ^
>> A(2).nest.ydata=[6 9 8];0 J& B0 C( J, F: \
>> A.nest

ans =

    testnum: 'test'
' |7 i4 h) D  x+ R% F3 D( U, Y      xdata: [7 8 9]
" i  a! S+ m" ?' w# I, p  r      ydata: [10 11 12]

+ `) ]% a5 X2 L6 m! Q+ }) h5 R
ans =

    testnum: 'test2'
, S/ y6 ^4 a' J4 ^. u6 S      xdata: [4 3 2]
% |9 L$ b3 p% N& N' c5 M1 I! U& p$ f" S      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata

* E+ f0 \  l1 u( o

该用户从未签到

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

该用户从未签到

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

9 t% U/ R% F9 QMATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 18:08 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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