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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑 * i: G" l8 b% i
: U& d. x; I' c0 Q5 q/ \

结构数组:

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

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

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


- B$ [0 L1 P4 v/ N) z+ \  ^

>> employee.name='tiger';4 R8 _4 l6 n+ j; J, H
>> employee.sex='male';5 h% ]2 z, E2 \2 h5 F7 I6 ^
>> employee.age='24';9 l9 T' {& \. `& J% v' s3 R
>> employee.number='12345';
: f' [4 v7 @0 G8 r8 G>> employee

employee =

      name: 'tiger'! w$ n3 X: Q( Y) L* T
       sex: 'male'$ L- V4 M: m2 ^( H
       age: '24'3 g7 t. d  ]- e* C0 C
    number: '12345'

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


; H) f! j1 a) Q

>> employee(2).name='lee';( w5 P# L/ D: N7 X; q/ C
>> employee(2).sex='female';) W4 [* d: a) b7 b* V
>> employee(2).age='32';
& P$ M4 a/ c. @; Z3 W4 [* o& `>> employee(2).number='82356';0 J$ X* \, _1 h
>> employee(2)

ans =

      name: 'lee'
. b9 e  J; H; T" ]4 s) p       sex: 'female'
0 t& A3 j; A5 S1 U$ D       age: '32'
! c( J' `: Y) E5 j    number: '82356'

, E1 g  \7 m1 a+ T0 q

> employee

employee =

1x2 struct array with fields:
1 i/ J4 ^+ Q& @8 }6 H0 O# R    name
. F; {' y' E' x    sex+ q" @6 X4 ]' t! W% J* d; H6 f
    age8 G) ?( J1 C: c' t' b& q$ Y
    number


( x) Y5 g1 y7 v( [7 R

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

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

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

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

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


' ~  X  O! _/ R9 S/ _5 V

>> list.ID=123;
) J' k  V9 X2 X! A( C2 K>> list.sex='male';
3 Z* i# ]' L) Y/ H( C- t8 ], P>> list.age=25;
' p% S- U: t6 [>> list

list =

     ID: 123
% w( M$ T0 G# p5 e% H7 [8 V4 `    sex: 'male'
" G* J1 k4 z7 B# c- x    age: 25

>> list(2).ID=456;
* b/ B1 X7 D- X# ]>> list(2).sex='female';
( ?5 y7 O) B4 R$ e>> list(2).age=32;;* u9 y4 k2 `. s2 _+ D" U
>> list2=list(1:2)

list2 =

1x2 struct array with fields:1 A) N+ G8 x" y" ~# M
    ID
$ n, E9 i. g" Z; k    sex
$ W" C# s. V  A. i1 j    age

+ z- ^2 j. |: V# P/ E

>> list2(1)

ans =

     ID: 1235 ?+ Q. s' U8 K8 a
    sex: 'male'
1 m3 k( ^% @- S" i6 {* }- h9 [9 j    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


7 O) T% Q* X9 x, j7 i6 y- [
$ g8 p- ]% ~/ D. m# e4 ?. v; ^' j, I7 s1 c2 }* N3 g

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
  X  c/ n7 g/ D% w>> student

student =

1x2 struct array with fields:
- G2 E" _* {$ @! ~$ k& h: i; G    name  ?4 f  N3 B3 X$ a8 u9 x
    age
$ i, C, T# g( t, Y( B    ID
* Z, J: w2 w% ~    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
! i6 X6 H9 W8 w3 w- G# l) S. P    9.5949    8.4913    7.5774
3 s9 W8 b+ O) m2 O, T    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


+ S7 T5 o, |1 N7 I) d* P+ K/ H* d6 ^ans =

bbb

>> student.('name')

ans =

aaa

* O* V/ Z$ J' K, ]/ }
ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


9 j: G1 X" q) L; P$ `9 g1 h1 A

>> 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]! u# N4 o& c$ g
    nest: [1x1 struct]

    添加元素

$ h) l! p, b! S" {7 ?1 Z

>> A(2).data=[1 3 3;4 5 5];- M' E2 \' L+ W$ Z) @4 G1 p8 _
>> A.data

ans =

     1     2     3" o; v( c- b/ t. L7 ]6 ?) I) ?3 q$ [
     4     5     6

! P. B) f/ y6 \$ u
ans =

     1     3     3
! Y. C4 P( w# r& |/ V1 }2 z6 k* g     4     5     5

>> A(2).nest.testnum='test2';
; r2 y( @- n6 @% w* @+ s>> A(2).nest.xdata=[4 3 2];
- T! E; v# j8 v* C, Y4 T3 U/ [>> A(2).nest.ydata=[6 9 8];/ a, W  b/ _- u: Q9 s
>> A.nest

ans =

    testnum: 'test'
* g" I/ D* W: a7 S      xdata: [7 8 9]
( r4 m9 g+ M3 m; L* h* e* X6 ^2 O4 e      ydata: [10 11 12]

! v* d! \3 G; l* e9 }3 Z# r/ A
ans =

    testnum: 'test2'" T% t( w3 i0 J. a+ K- s( o7 S, p
      xdata: [4 3 2]2 E- m3 L; d' K7 _1 j* C7 }
      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


  i% }5 B) c4 o7 t

该用户从未签到

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

该用户从未签到

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

" t. N( o  ]' e3 c% ]6 @3 ~0 U, zMATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-24 13:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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