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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
1 h# d1 N& {/ i/ z! W8 Y6 i* S$ L" y- K

结构数组:

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

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

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


2 O9 u) I9 k3 r# M* U* K

>> employee.name='tiger';
# H) k3 [) @* r* g, O6 w+ k>> employee.sex='male';
, I+ c! l5 c, E+ r>> employee.age='24';
/ ~( R2 r4 O/ V>> employee.number='12345';
( B; U/ J: `- F. W7 Q>> employee

employee =

      name: 'tiger'  p8 x4 h  b0 }1 L  x; W: h6 f; c
       sex: 'male'" h' Y4 p% {  D
       age: '24'& x& L  i7 E- ^- T
    number: '12345'

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


1 d, X2 R) m& q

>> employee(2).name='lee';) I( A+ a9 ^$ o- c4 }
>> employee(2).sex='female';6 P! M5 C5 I  G; L( I
>> employee(2).age='32';7 k9 I3 P. D" z2 S
>> employee(2).number='82356';" m3 w( A0 F' T& M1 f8 ]0 V
>> employee(2)

ans =

      name: 'lee', G- C$ K3 f$ z
       sex: 'female'- k: G- `$ E" F$ B. ^7 c5 @
       age: '32'
& c0 K/ D" u1 U8 Q    number: '82356'

3 W8 B- k' S" Y7 L0 V( }- x4 G  J

> employee

employee =

1x2 struct array with fields:
9 L# g* F( z5 Y7 s* N# w5 x    name& ?5 k2 i! U1 t( s( x
    sex! D; m1 I- G* T8 m3 W7 p
    age
* A4 d2 J8 \6 p7 x1 _3 ?5 @1 V    number

. Y7 \9 ?; u; t7 t. \9 c2 j8 P$ n

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

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

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

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

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


% a2 b7 Z: Q/ `) W: G3 Z+ J

>> list.ID=123;
4 f* P7 b4 m0 w6 N6 a3 e>> list.sex='male';
& E. C7 Q9 C/ N# o6 G* r  `, J- {>> list.age=25;- x: h: u+ s2 q6 d' ?* y5 H; Y
>> list

list =

     ID: 123/ X+ Q; Z2 c% }4 ]$ r
    sex: 'male'
) C0 S! V1 N; {9 i; C  x4 n    age: 25

>> list(2).ID=456;
9 C. a( O4 D6 m>> list(2).sex='female';
! D* `9 @2 y9 }& b0 a>> list(2).age=32;;* E4 R+ o. ?( {1 r6 `8 o0 G! V0 `
>> list2=list(1:2)

list2 =

1x2 struct array with fields:/ B. D9 }. h/ H7 m; @) i$ q
    ID
2 k' Y) v, y0 |$ s    sex6 p6 |& ]& d- u
    age

' d. o4 ]0 E3 l$ h/ g+ k; ^

>> list2(1)

ans =

     ID: 123
0 {. a0 O7 |& M8 `: b4 c$ n/ U% v    sex: 'male'
; n" L' N' e- D# N+ x$ e4 r    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


4 c6 ?2 m4 }1 u: W" j8 ]/ v: w% z* i2 V: V- T5 B* d! Z8 c

, p* H9 h9 Z3 A6 t& c* L  t% @% ?; M

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});1 a7 m% [" z* F
>> student

student =

1x2 struct array with fields:) K" U# R0 h0 [* `
    name
7 [% b0 P! V$ ]- Z2 |& j" {& P* v    age7 P1 P* z8 z1 {' a7 |/ Z
    ID9 i8 J  G0 L) I: y# k. W
    score

>> student(2).score

ans =

    7.9221    0.3571    6.78742 e1 v9 s! _5 `' ?' E1 k9 v8 Q
    9.5949    8.4913    7.5774
+ J* p. d9 s( E) e4 S    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


6 J! w1 l- x/ @* L! [# x7 Fans =

bbb

>> student.('name')

ans =

aaa


; O" q9 F) ~: I: U- ], Yans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:

* N+ Q2 t' ?, M$ q

>> 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]
' i3 c  R! L1 V    nest: [1x1 struct]

    添加元素

& D+ b, R9 ~) M3 X& g: u* ~

>> A(2).data=[1 3 3;4 5 5];
$ c: z" e7 p9 i$ h2 n>> A.data

ans =

     1     2     3
: h+ L! B5 X0 \  c- v" n     4     5     6


2 n3 m& E7 Q* g* s$ b5 b1 X/ A+ z# u" m& Sans =

     1     3     3
1 N9 d6 R  F2 ]0 I& @- f0 u5 c* I     4     5     5

>> A(2).nest.testnum='test2';4 T3 a5 x6 j* i' }2 l$ u* S5 A
>> A(2).nest.xdata=[4 3 2];3 O9 {% j8 E5 {4 \
>> A(2).nest.ydata=[6 9 8];1 Z( J( n. U* W% I( K$ W; p) w+ ~
>> A.nest

ans =

    testnum: 'test', `" [2 V0 i, R& i. Y( b6 G
      xdata: [7 8 9]% r8 p  Y+ S3 {  R4 [6 w$ [$ L# R
      ydata: [10 11 12]

5 Q* K: s; `# x
ans =

    testnum: 'test2'
( z% J' i0 i3 K2 h+ P/ B4 K      xdata: [4 3 2]5 M4 e: h7 e6 x
      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


2 F" M* b! @/ \$ X" A  M: h

该用户从未签到

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

该用户从未签到

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

6 s( I5 p4 u# q8 Z# w- Q! pMATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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