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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
3 a: w4 ?# T" q% ~
& f( |# F2 q( h6 m% A! `

结构数组:

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

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

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


  D: ~& J3 Q3 y, |

>> employee.name='tiger';+ `% h% P5 ?) R( b4 c
>> employee.sex='male';) F  g4 g8 @. k4 ?
>> employee.age='24';/ m; e6 G6 a$ ^+ v7 x
>> employee.number='12345';
; S! K* A) r8 o1 [/ P>> employee

employee =

      name: 'tiger'
& R% ]' g: _+ A1 N& ?( J% n, `5 J8 a/ N' b       sex: 'male'
/ W  f' A$ ^! D0 y, E. V6 O       age: '24'
, p+ e" ?  W! t) p0 ^; J$ F    number: '12345'

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


! O# B) u% Y5 s: |

>> employee(2).name='lee';
  e3 C, J+ y$ I% r" f% f% e5 B>> employee(2).sex='female';8 B, O( {/ g" Q/ @/ `. y
>> employee(2).age='32';: l3 G4 N4 u# c" L4 T2 L
>> employee(2).number='82356';
0 ^- y8 F3 B1 z) c+ W>> employee(2)

ans =

      name: 'lee'  q! H9 {& z- a& b1 h' {% b
       sex: 'female'  A3 h7 b- J+ i
       age: '32'' z8 z. r3 {! e/ ~) K0 y7 A
    number: '82356'

. C% A4 Q$ E3 \! K2 g1 E, o

> employee

employee =

1x2 struct array with fields:
. B5 ?+ H; n+ t$ N' W2 P/ f  Z8 p$ U    name% E  w4 y- c& t  I, o* Y3 w
    sex
8 F6 f! ~; Y5 K- Q    age$ x, h4 k7 q: O9 e
    number


! j% `% A, Q% }( }

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

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

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

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

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


% e1 Y5 i3 B8 s, ~

>> list.ID=123;
, j( T2 Z* J7 b; V9 e3 u! B% N" O# v>> list.sex='male';
& r! u4 y0 U4 C; z2 {( }/ j>> list.age=25;
" @9 P" b6 F, i" ^% [# F>> list

list =

     ID: 123* s/ q+ U3 j  x& W# x- e  u
    sex: 'male'! S8 m+ Q9 G: Y8 z# H6 \. T
    age: 25

>> list(2).ID=456;
: D+ ^: R. v( V; F+ q>> list(2).sex='female';, @7 N" m: o! U2 p8 G1 ?! X8 p3 q5 a9 s
>> list(2).age=32;;
5 G8 q. f/ N' X3 I>> list2=list(1:2)

list2 =

1x2 struct array with fields:& o1 o8 j; |: v$ ]3 D
    ID
, M8 j8 m+ z3 a, Q1 l  `: p    sex
) O2 h$ @5 V9 k0 m/ O1 b    age


! Z! j/ Z" @+ G% R9 d

>> list2(1)

ans =

     ID: 123
9 V/ {* z( w& q, E" Z2 X8 i& c    sex: 'male'5 B- K# j; h5 J
    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32

7 D7 \. X' r) `4 \* N5 u
4 u) N: T" v! k9 O# W) g! T

! a$ A2 }. \2 V6 ~+ }4 ?

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
4 u* F; b$ W! Q>> student

student =

1x2 struct array with fields:* z# I( X( a" a' h8 a
    name
. F8 T' g1 _/ f- F6 h& u    age  ^/ B* u# }$ b/ Z- O4 G; M' w( ]
    ID, ^2 u6 g7 r' ~/ W( F
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
! E& D2 D& A: v* X    9.5949    8.4913    7.5774; k% g5 q- S! E' b
    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa

( ~- ~# I' X# o: @8 F5 P! x
ans =

bbb

>> student.('name')

ans =

aaa

  A+ s' c' @0 F3 `4 t; `" f
ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


, k2 w! ?$ s" f1 l8 `/ G$ g5 y1 E

>> 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]
7 }' [: G5 s) q# I  V    nest: [1x1 struct]

    添加元素

! `7 D9 ?" h: }. Y! P

>> A(2).data=[1 3 3;4 5 5];
1 I& I+ z6 r9 v5 L% o/ Q! X>> A.data

ans =

     1     2     3- R5 T  |& i8 j3 e4 q
     4     5     6


6 P, `% u  x0 q0 z3 zans =

     1     3     39 L/ o9 [' y( ^- Z
     4     5     5

>> A(2).nest.testnum='test2';- w1 M1 ?! ]+ K3 e' K) \) a
>> A(2).nest.xdata=[4 3 2];* a0 L# t8 n# X5 m& x
>> A(2).nest.ydata=[6 9 8];3 O, l# j* _  v# r- Q6 H
>> A.nest

ans =

    testnum: 'test'7 N) X$ O* p, v3 h+ e
      xdata: [7 8 9]( D/ a2 a8 H+ ]3 h3 i
      ydata: [10 11 12]

* k8 q) ~, r+ l0 F8 }! h
ans =

    testnum: 'test2'& {. {8 H, o; I9 U' i
      xdata: [4 3 2]1 g/ I6 ~* l2 `  `* L3 w
      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


; E* z# O1 z1 e( g0 [* G. p) e/ L

该用户从未签到

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

该用户从未签到

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

7 m2 W! [( ]$ |: t4 ]  y, wMATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:11 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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