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

MATLAB中的结构数组

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 uperrua 于 2020-4-26 15:36 编辑 + h# R. M# _7 g5 `

* V5 y( t  v. h

结构数组:

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

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

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


- t; h. d/ N: g* D/ ^$ r' U, I  X

>> employee.name='tiger';
0 r" s" e/ [* y1 w/ t! u>> employee.sex='male';, g$ ?5 v* ?( P0 ]: o0 L1 n
>> employee.age='24';
( B  n7 C  x" X4 i; J>> employee.number='12345';$ ]3 b  G2 _6 G& l& g
>> employee

employee =

      name: 'tiger'' P( I* H! F" Y
       sex: 'male'+ r4 n4 \  ^* e) T5 |
       age: '24'9 ]4 ?5 O# `3 Q2 I* S4 c& b
    number: '12345'

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

  b# }, [* x( I

>> employee(2).name='lee';
5 N- E) P7 o$ H; l1 i8 G( g9 A7 D>> employee(2).sex='female';
5 b5 H% z/ h! j* J0 s! z>> employee(2).age='32';- a2 ^: ^  c6 v8 A# J
>> employee(2).number='82356';( f& G8 q$ ~1 h3 F
>> employee(2)

ans =

      name: 'lee'1 ?! F$ |8 a' D# X- c/ Z3 F1 w0 k
       sex: 'female'4 N3 r  u2 l0 [
       age: '32'- Q! R4 n0 G& P* M' k# m/ T
    number: '82356'

* ^& C4 j. f9 n; J- R$ i; F- A$ q0 T

> employee

employee =

1x2 struct array with fields:* X  X/ i" `1 x+ @; t5 P, O
    name
- P( ~9 c1 ]1 F    sex. I3 b) I! E$ g
    age
) w; w) U/ i% R& j# F3 }6 Y- J6 J    number


. T8 F  o' c) m: G2 c7 ~0 q  Q

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

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

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

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

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

2 e  V* n3 @( r& i1 ]/ h

>> list.ID=123;- k& _) d# w0 g: M* u
>> list.sex='male';
' D; x, z& _! g% o" ?: ^3 o>> list.age=25;
/ a; w% ]5 T0 M6 ]% z>> list

list =

     ID: 123
' n6 O6 L5 u+ \& ?& \9 ]    sex: 'male'
7 C9 M* e3 \1 H2 s: M% N    age: 25

>> list(2).ID=456;
$ u6 C5 P) p# @) j>> list(2).sex='female';
2 B8 N4 t8 F+ f- I>> list(2).age=32;;$ r5 A; ~  q! s& y/ _) `" w* F3 p
>> list2=list(1:2)

list2 =

1x2 struct array with fields:
: M" k2 c$ @8 z: C% E$ w, _    ID. D# H( q; d$ y0 N9 I  n, V
    sex
7 L2 l) S; Z: y5 `* S/ Y    age


4 {8 S5 F  X6 X! Y5 r5 `3 y

>> list2(1)

ans =

     ID: 123  D1 ]( y3 g% K
    sex: 'male'
8 K$ k) N" Z7 F0 g+ m1 l- @, N    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

    25    32

. x( \! F! }, r" A  q0 J" N
& a  X4 q/ @% k  R

! G/ g& t3 ]; B2 J8 R4 d/ H% _2 K

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
. w, ^8 B. g! k: b( E: u$ s>> student

student =

1x2 struct array with fields:
( U, u) R# ~0 k: m: h, `: l$ G9 H    name
4 A: l/ n& |; C1 O    age
. t! c& r; x; h, k    ID
. J' u, u( o- ?3 a* _    score

>> student(2).score

ans =

    7.9221    0.3571    6.7874
0 D7 ]; [1 V3 o$ K. I3 h    9.5949    8.4913    7.5774; x6 F# r4 L* L/ t' I
    6.5574    9.3399    7.4313

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

ans =

    9.6489    9.5717    1.4189

>> student.name

ans =

aaa

" z2 f; T/ D/ N' e" g
ans =

bbb

>> student.('name')

ans =

aaa

" u. j% \' E; Q4 T2 {6 }0 m
ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

ordeRFields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

    struct函数创建嵌套结构:


$ c( s$ H# t! X5 p2 k

>> 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]
- D5 E( j. H9 |: X+ o/ d4 I    nest: [1x1 struct]

    添加元素


; k& P; y. _4 P  d/ c5 _$ ^$ }( d3 K

>> A(2).data=[1 3 3;4 5 5];
! R+ k8 Q# S. ]; g% E>> A.data

ans =

     1     2     3
. p& j6 c; N$ ]# e     4     5     6

; I9 i+ {6 W6 }
ans =

     1     3     3
" X, u* r7 c" ~& b& ~$ U5 H+ i- u) m     4     5     5

>> A(2).nest.testnum='test2';
/ K+ v# y8 h6 r( q3 @1 {. t>> A(2).nest.xdata=[4 3 2];* p/ M0 S1 Q! h9 Q  B4 }6 R
>> A(2).nest.ydata=[6 9 8];
' I# [4 Y" K' Q% x: r- y>> A.nest

ans =

    testnum: 'test'( E6 j1 n1 X& Y% X: F: _; q
      xdata: [7 8 9]
6 |; R  P5 C. d      ydata: [10 11 12]

# |3 t  s+ u( K! r
ans =

    testnum: 'test2'
1 [; F( {$ H- |, _) y6 A& H      xdata: [4 3 2]
- d. }# c( |( K0 J/ h8 M7 a      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata


1 i! M. @- }: S

该用户从未签到

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

该用户从未签到

3#
发表于 2020-4-26 15:34 | 只看该作者
  r, E5 a* z- ]
MATLAB中的结构数组
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 10:15 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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