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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑 1 ?9 y1 [9 J% ]

; h  R- e% b- M' r5 L6 f* Q  f

结构数组:

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

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

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


/ Q/ C6 R& }4 `5 _3 p2 r

>> employee.name='tiger';
$ ~; q1 B' d7 s4 c6 w>> employee.sex='male';
' l) P( K# L% l. D$ o>> employee.age='24';
% S1 ~1 s4 R8 l$ |" A8 D' [. M>> employee.number='12345';
+ m2 M2 Y. w/ u4 v>> employee

employee =

      name: 'tiger'
! |2 N: v/ G3 A       sex: 'male', k0 N% a+ ]* v+ f/ i
       age: '24'
9 k/ z( q/ N" i9 q: F    number: '12345'

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

! |( S& }7 s. `7 f

>> employee(2).name='lee';
$ V( X0 o4 }: }6 O/ V>> employee(2).sex='female';  `; e0 \) o! y) s% g0 a) T
>> employee(2).age='32';
% b& O7 A: q; ?9 Q+ e6 H3 J>> employee(2).number='82356';% a; c+ v+ F' Y9 f# t7 S
>> employee(2)

ans =

      name: 'lee'
3 u* P. c7 e! S- C       sex: 'female'
, X/ e" N# P) w; k. _       age: '32'9 y1 I  a. t# l& m& v  J& b! r
    number: '82356'

: A3 J7 q- s" s5 v" l- @

> employee

employee =

1x2 struct array with fields:1 k+ h7 b/ l$ |# x; R
    name
# [! u2 i% H" }0 T/ H2 ?2 a    sex* [' i0 D* a# B( R( N& z
    age/ F" s+ L9 l- [& y3 B: M8 l& I0 r/ g% l
    number


1 A. r9 y. ~) w' |# i. E

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

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

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

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

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

+ I" Y0 C9 \' s/ A' ?- M& G

>> list.ID=123;% p/ M- A1 L, k0 V3 C
>> list.sex='male';3 N$ l' O' c) j4 w  G
>> list.age=25;
# R2 H2 u6 Q9 V; X0 M, y>> list

list =

     ID: 123: v3 F2 m) C- k! L
    sex: 'male'" x/ N5 O8 Z3 l; n% e7 b- r& z, T( ^
    age: 25

>> list(2).ID=456;3 Y8 h3 }& `& R0 z6 X# w* Q/ x
>> list(2).sex='female';3 y6 z/ ~$ s; ?9 M* z
>> list(2).age=32;;% _  A4 |4 B) }& L, m1 e
>> list2=list(1:2)

list2 =

1x2 struct array with fields:- }5 A( P; t, j
    ID( H' D, t( U& e- X: g& }# Z
    sex
0 L3 O" z# ~9 q4 x    age


3 K" C% @) N3 O% ~7 L

>> list2(1)

ans =

     ID: 123
1 ]7 f. _! m( P* l0 N    sex: 'male'
3 V% z/ }. Q+ f2 b( ~/ j    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


* ]: W3 f- N; X8 v8 c6 |8 ~+ q( j8 t2 ?* v) @
2 O" j! N( q$ `2 o, d

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});- l  o) v) f" B( ^& ?
>> student

student =

1x2 struct array with fields:
5 a8 S. F! G9 j# U$ m! k- u0 c    name# Q" G7 H) A( X* n+ O- m
    age1 M1 K' K( l: D. ]
    ID6 K. D0 x3 K5 T& L
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874, O3 a% e6 Y$ D# N; [
    9.5949    8.4913    7.5774
6 v' Z2 @( w7 v: i! d3 U6 o  W8 B    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


7 R9 ^+ F8 c5 Y7 K; P' H3 V- ?ans =

bbb

>> student.('name')

ans =

aaa

3 X! x/ P' e4 `% ]. O, l$ a0 I
ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:

) Q& ^* `# D$ ^& \4 x+ c

>> 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]( y0 |; ^: F8 Q  P1 D
    nest: [1x1 struct]

    添加元素

5 O6 y9 g# V( G1 Y: W3 |

>> A(2).data=[1 3 3;4 5 5];; @  Q( M9 }! u$ O) }$ l
>> A.data

ans =

     1     2     3
" u/ T0 Y# ~& D     4     5     6

! G5 `! u+ j! U( x8 b# V
ans =

     1     3     3
* @& y! A0 W1 n9 ]% d- X" ]9 a' }     4     5     5

>> A(2).nest.testnum='test2';
0 N: O. P( R1 a. j2 E4 `+ @6 [>> A(2).nest.xdata=[4 3 2];( p, h: e9 Y" T7 j; e
>> A(2).nest.ydata=[6 9 8];* q6 U! B5 l- I6 \! E* t
>> A.nest

ans =

    testnum: 'test'3 `) Q* p# E+ x  _
      xdata: [7 8 9]' k3 q2 a" i' ?- n% C8 W: p
      ydata: [10 11 12]

& K6 w$ y4 p% |7 c. ?0 a* G
ans =

    testnum: 'test2'6 Q9 ?6 F2 Z+ q0 W! F/ \
      xdata: [4 3 2]
$ F5 n$ }" m( D9 \( x4 k% Y/ X) b      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


" e; g% p' [. w

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-26 15:34 | 只看该作者
( }4 C; S+ v' k7 z
MATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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