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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
: ]! U4 D0 h& w! }2 o$ i8 M
% G; D1 u* u& y) j9 f

结构数组:

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

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

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


0 ]$ J% v1 `2 L

>> employee.name='tiger';: [- x, s0 Y: V. w- R
>> employee.sex='male';
6 R; h/ P/ f- w' _8 b- X1 J>> employee.age='24';! q0 M7 f/ q9 ?" N. m
>> employee.number='12345';5 w# c! V3 {3 f: x
>> employee

employee =

      name: 'tiger'- }# [4 B3 P  `; U2 l
       sex: 'male'+ x& r* W9 D9 c
       age: '24'7 v: Q* L$ v4 v, Z7 _. b
    number: '12345'

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


7 ]  x/ @. \% M: `- a2 e' Z3 F

>> employee(2).name='lee';' C9 ^. e4 Q7 o. G
>> employee(2).sex='female';* U4 N7 w3 V1 X- n; I5 S
>> employee(2).age='32';
8 P+ v7 A& p5 C2 D/ O6 O* W>> employee(2).number='82356';
' X3 y* I1 T5 Y  y0 c>> employee(2)

ans =

      name: 'lee'
" r2 R, R. w6 L) Z       sex: 'female'
/ V% P4 A0 q; k  d  F- @% J  X       age: '32') D# N7 B5 h& m4 @
    number: '82356'


8 q# H9 H9 [3 P' A

> employee

employee =

1x2 struct array with fields:
: s# C% e) i8 v! [7 b7 e    name+ }( u9 P/ {1 i/ ]
    sex* t$ g1 V2 P/ ?
    age
$ ^1 o2 C/ X3 \0 r) D* _    number


0 P2 Q- q1 r0 H5 n

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

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

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

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

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


: h4 S3 j) Z5 |% U6 f. X( V

>> list.ID=123;% W7 E0 A! D+ P* h3 c# X7 B
>> list.sex='male';: o9 y$ _, G: `" J$ {2 {
>> list.age=25;$ I2 C* W8 Z# z: Z' W: r" y
>> list

list =

     ID: 123
% G& f/ b3 z& T/ r5 U$ l1 z: V    sex: 'male'
" [- I+ o! s& w" {' z    age: 25

>> list(2).ID=456;. D3 o# {0 g: L/ B9 o
>> list(2).sex='female';* s' o! o# s- [0 C
>> list(2).age=32;;1 D2 a( I; [. U
>> list2=list(1:2)

list2 =

1x2 struct array with fields:
* S* H+ \0 R% w* }4 q  F6 V- \    ID% t% m* q* N+ O$ ?
    sex
/ d' b9 [! ]: j/ D, q+ U* }: A1 f    age

! e0 a$ U' K' r  R. X9 m

>> list2(1)

ans =

     ID: 1234 {) Y" L1 o8 G7 P# _* n% t6 r5 w
    sex: 'male'/ ^, l2 q" y+ s) [  z" K, X$ i
    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32


+ X7 _; ]8 M( a& Y8 W9 O9 }$ _. {  C7 M
, V/ _1 Y8 ~( Y: h* h$ K- @7 ~

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});; a" ]  j/ n6 C. k5 H0 U! ^
>> student

student =

1x2 struct array with fields:2 F5 P# q. N: U
    name% h: b+ T4 W3 f5 b1 k$ Z
    age9 ~/ h+ u3 |' Z# H+ B
    ID+ Q4 x. Z, ^/ ?! M( |& N0 n% J
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
( Z; V9 L2 U1 \& Y    9.5949    8.4913    7.5774
$ G/ `7 z% R, j# z    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa

- K9 y5 R$ W) _! E1 ?
ans =

bbb

>> student.('name')

ans =

aaa

# y1 H6 t% b  N/ {6 w
ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


6 n  Y( }4 C: u3 u# r1 \( ~: t, J

>> 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]
# o4 X3 s" Z7 T( z+ J2 X8 Z    nest: [1x1 struct]

    添加元素

6 q' H" l/ L$ L" d2 s( j9 R, V  r6 c

>> A(2).data=[1 3 3;4 5 5];8 {1 _( j) y5 Q$ g7 k1 h
>> A.data

ans =

     1     2     35 d# N7 D! \8 E0 c: `: n) w$ o5 d
     4     5     6


* t+ ?& @& r/ l+ p) b3 E1 C* B* q  Kans =

     1     3     3
+ N# e5 T* ?' r" R     4     5     5

>> A(2).nest.testnum='test2';7 j4 Z' e: M, e" j8 R8 ~0 g
>> A(2).nest.xdata=[4 3 2];
* @8 f+ d  g, L6 ]  p>> A(2).nest.ydata=[6 9 8];( D7 E2 e& m0 D
>> A.nest

ans =

    testnum: 'test'
7 }0 @! o2 B; j) T/ y! s0 ^      xdata: [7 8 9]
. N; {  D- L, d6 I& K      ydata: [10 11 12]


/ g( F4 z" L8 I0 Qans =

    testnum: 'test2'
( N, P, `( P: u  y( V      xdata: [4 3 2]
1 z0 F( j: p8 c, l2 e* \! `! v9 f      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata

$ V1 j1 Z+ x- o9 w9 R& L

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-26 15:34 | 只看该作者
1 u; k% v  ?* c
MATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 11:07 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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