MATLAB中的结构数组

MATLAB中的结构数组

结构数组:

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

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

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

>> employee.name=‘tiger‘;
>> employee.sex=‘male‘;
>> employee.age=‘24‘;
>> employee.number=‘12345‘;
>> employee

employee =

name: ‘tiger‘
       sex: ‘male‘
       age: ‘24‘
    number: ‘12345‘

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

>> employee(2).name=‘lee‘;
>> employee(2).sex=‘female‘;
>> employee(2).age=‘32‘;
>> employee(2).number=‘82356‘;
>> employee(2)

ans =

name: ‘lee‘
       sex: ‘female‘
       age: ‘32‘
    number: ‘82356‘

> employee

employee =

1x2 struct array with fields:
    name
    sex
    age
    number

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

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

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

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

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

>> list.ID=123;
>> list.sex=‘male‘;
>> list.age=25;
>> list

list =

ID: 123
    sex: ‘male‘
    age: 25

>> list(2).ID=456;
>> list(2).sex=‘female‘;
>> list(2).age=32;;
>> list2=list(1:2)

list2 =

1x2 struct array with fields:
    ID
    sex
    age

>> list2(1)

ans =

ID: 123
    sex: ‘male‘
    age: 25

>> str=list2.sex

str =

male

>> ages=[list.age]

ages =

25    32

(4)结构数组中的操作

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

Struct_name.(expression)

>> student=struct(‘name‘,{‘aaa‘,‘bbb‘},‘age‘,{23,24},‘ID‘,{001,002},‘score‘,{rand(3)*10,rand(3)*10});
>> student

student =

1x2 struct array with fields:
    name
    age
    ID
    score

>> student(2).score

ans =

7.9221    0.3571    6.7874
    9.5949    8.4913    7.5774
    6.5574    9.3399    7.4313

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

ans =

9.6489    9.5717    1.4189

>> student.name

ans =

aaa

ans =

bbb

>> student.(‘name‘)

ans =

aaa

ans =

bbb

(5)结构操作函数

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

fieldnames:获取结构的字段名称

getfield:获取结构的字段数据

setfield:设置结构的字段数据

rmfield:删除结构的指定字段

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

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

orderfields:将结构字段排序

(6)结构数组的大小

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

(7)结构数组的嵌套

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

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

struct函数创建嵌套结构:

>> 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]
    nest: [1x1 struct]

添加元素

>> A(2).data=[1 3 3;4 5 5];
>> A.data

ans =

1     2     3
     4     5     6

ans =

1     3     3
     4     5     5

>> A(2).nest.testnum=‘test2‘;
>> A(2).nest.xdata=[4 3 2];
>> A(2).nest.ydata=[6 9 8];
>> A.nest

ans =

testnum: ‘test‘
      xdata: [7 8 9]
      ydata: [10 11 12]

ans =

testnum: ‘test2‘
      xdata: [4 3 2]
      ydata: [6 9 8]

>>

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

A(1).nest

A(2).nest.xdata

时间: 2024-10-02 19:23:11

MATLAB中的结构数组的相关文章

matlab中元胞数组(cell)转换为矩阵

matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ——reshape(A,m,n,p,...),将矩阵A变换为m*n*p*...的矩阵: ——permute(A,[1,3,2]),将矩阵A的第3维和第2维交换,从而满足顺序要求: 下面举一个我自己用过的例子: H——<K*1>cell,其中每个元素为U*S*N*T的四维矩阵(H为WINNERII

matlab中元胞数组的创建与内容读取

一.创建元胞数组 1.用cell命令创建规格为2*2的空元胞 >> a=cell(2,2) a = [] [] [] [] 2.用大括号"{}"创建元胞数组并赋值 >> b={'abc',[1,2,3];123,'a'} b = 'abc'   [1x3 double] [123]  'a' 二.读取元胞数组内容 1.获取指定元胞的大小,用小括号"()" >> b(1,2) ans = [1x3 double] 2.获取指定元胞的

MATLAB中图像的基本操作

MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread(filename, fmt) A是结构体名,用来存储读入的图像数据.filename是读取的文件名,文件名要用”括起来.fmt是读取文件的类型如:jpg.png等等,这个参数可以不输入,由MATLAB自动判断. 显示函数imshow()原型: imshow: imshow(I) I为读取后保存在MA

C#中自定义类数组和结构数组的使用

如有雷同,不胜荣幸,若转载,请注明 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一个自定义数组,既方便又节省时间,以下是类数组,其实相当于定义了一个实体类一样,只是使用的时候写成数组的形式在用 Class RGB { public byte red; public byte green; public byte blue; public RGB(byte r,byte g,byte b) { this.red =

MATLAB中多个一维数组的合并

1.一维数组直接合并 题目: 数组work1[x1,x2--,xn],work2[y1,y2--,yn],现在要生成一个数组work3, work3中的数据为[x1,x2,x3--xn,y1,y2--yn]; 合并方法: 直接将两个矩阵合并: A = [1,2,3,4]; B = [-1,-2,-3,-4]; C = zeros(1,size(B,2)+size(A,2));     %这句可以不要; C = [A, B]; 2.一维数组交叉合并: 题目: 数组work1[x1,x2--,xn]

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

关于DPM(Deformable Part Model)算法中模型结构的解释

关于可变部件模型的描写叙述在作者[2010 PAMI]Object Detection with Discriminatively Trained Part Based Models的论文中已经有说明: 含有n个部件的目标模型能够形式上定义为一个(n+2)元组:(F0,P1,..., Pn, b),F0是根滤波器,Pi是第i个部件的模型,b是表示偏差的实数值.每一个部件模型用一个三元组定义:(Fi,vi, di),Fi是第i个部件的滤波器:vi是一个二维向量,指定第i个滤波器的锚点位置(anch

MATLAB中文件的读写和数据的导入导出

http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件.MATLAB使用多种格式打开和保存数据.本章将要介绍 MATLAB中文件的读写和数据的导入导出. 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开.13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保

matlab中cell介绍

1. matlab中cell的概念 cell又称元包,是一个类似矩阵的东西,它可以存放任何类型的数据,即矩阵.字符串.数值类: 2. cell的创建 创建cell的方法:直接使用C={A,B,E,D}这种形式,不过这里把“[]”改成了“{}”; 使用cell创建cell:C={C1,C2},这里C1和C2都是cell类型,直接把C1.C2作为一个cell得到C3是一个1*2的cell数组:使用C3 =[C1 C2],是使用C1和C2的内容来创建cell数组; 使用cell函数,A=cell(2,