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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑
) G! V, A! \. R6 h4 p9 b* E5 [9 X1 q* n; Y# ^; J3 U( `

结构数组:

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

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

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


! j' M, B4 y* R- N. I/ {

>> employee.name='tiger';1 h5 _3 ~6 T/ v6 v& f) w
>> employee.sex='male';
- O+ k) E* ~: o# a  K+ S>> employee.age='24';
2 h$ V8 U0 q6 J# C5 _>> employee.number='12345';
3 I3 N$ c9 s2 S' E: q5 ]% M>> employee

employee =

      name: 'tiger'* W) _, A/ [" ^2 S* F2 a  J. i
       sex: 'male'
- B7 n/ |& U4 P9 p       age: '24'$ N+ s( C9 V; X" s8 l
    number: '12345'

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

2 H+ T0 {# i8 _% X8 X$ n& O( W  J

>> employee(2).name='lee';
% |. i7 R* e+ o7 p9 c; J: v$ V>> employee(2).sex='female';
2 X5 g" W9 A: \>> employee(2).age='32';* ^, D; ?$ h( {& j4 ^9 i4 p- Y! u
>> employee(2).number='82356';
6 j, f: ?: V. ?$ p6 X7 V>> employee(2)

ans =

      name: 'lee'
- y( G. S  t3 p# a0 ^3 d# m       sex: 'female'
* I2 d& ]9 D* A/ Y9 V       age: '32'
6 A0 Z: A$ r/ B: Q) P    number: '82356'


7 C3 P2 I  u3 V* q

> employee

employee =

1x2 struct array with fields:
$ P& n3 S( x1 _& M    name6 G  D, g$ l1 q. z, B
    sex+ Y* o, \$ A3 y8 n7 o0 l
    age+ B0 R( D7 j5 C! d
    number


* D. S8 ?: [9 D9 d

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

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

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

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

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


0 Y( o* L4 _# e8 C6 l8 s

>> list.ID=123;
5 P, X# p* E8 Y" p. w( l& m>> list.sex='male';! ?( ]4 F4 d7 t4 q4 U
>> list.age=25;) Q8 Y1 Z2 c8 ~
>> list

list =

     ID: 1238 w) l$ r. g$ b
    sex: 'male'
7 G+ B& }# T8 F8 s& F0 O! Q! p* {    age: 25

>> list(2).ID=456;9 g' A# X' C+ W; d7 ^' [( P
>> list(2).sex='female';
' {0 R1 n# z. U' V>> list(2).age=32;;5 W' G3 L; w' E, B( d
>> list2=list(1:2)

list2 =

1x2 struct array with fields:" b7 p5 G$ b' n3 Y
    ID' U$ \7 W3 B, y( D/ p* ]  h% O) V
    sex* N) y/ a# T+ S& |* N( {3 F, ?
    age

' C. o/ f# C, H0 P2 b

>> list2(1)

ans =

     ID: 123
3 H; P- C/ k6 k    sex: 'male'" t9 H$ H% n' P; b
    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32

7 w  _- I/ X. \2 \% V

0 L# h0 m/ q" b, A
7 ?8 i; ~( }& j% R

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
3 |, d  N  D2 K+ I/ ~' F8 g2 p>> student

student =

1x2 struct array with fields:
' i( p0 G  k) V4 V    name' ~- l: {) ]% h) |; c
    age
7 `) U8 D0 Q+ B    ID& q  J, _2 p6 i" m
    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874& ~7 w4 f+ `) H" V9 Q2 X# A
    9.5949    8.4913    7.5774( R$ @* O8 M8 x4 V$ N; r9 Z& [
    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa


4 Z5 E0 K2 L5 l8 R/ Eans =

bbb

>> student.('name')

ans =

aaa


% e  |. D" ?) p) uans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


. {1 `* V: h, F) Q$ g: I! P" w8 X

>> 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]
( k) C: `" |, ?! ?' e1 T8 W- B( S    nest: [1x1 struct]

    添加元素


- v" C5 L: o! F% C5 N$ H& r

>> A(2).data=[1 3 3;4 5 5];6 ?) Y( r1 @# v4 V1 [/ }( ^, R
>> A.data

ans =

     1     2     3. B8 X2 ]. B% Y$ W
     4     5     6


3 b$ |8 g0 C4 D3 N& P  v1 Q: ]ans =

     1     3     31 U% ~* |- \# R( Q5 O
     4     5     5

>> A(2).nest.testnum='test2';: C- w6 N# E. R: o, K( @
>> A(2).nest.xdata=[4 3 2];
9 V: v9 _! i6 z& z; ^+ b+ T! R>> A(2).nest.ydata=[6 9 8];" O) H% z* F1 v
>> A.nest

ans =

    testnum: 'test'
% j4 g6 q- F$ h3 [8 D1 T, a      xdata: [7 8 9]+ d- \+ q$ I3 y/ J, o; B5 t
      ydata: [10 11 12]


' I- q* k- C5 ~$ ~% C# hans =

    testnum: 'test2'
. }$ p/ x: {- [9 [5 c! ]; t" ^      xdata: [4 3 2]
- N3 F) M  ^/ [      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


6 o$ ~; y8 G* W. N4 ~& M: s

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-26 15:34 | 只看该作者
4 H$ |/ R7 x2 f4 S+ L  G
MATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 21:53 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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