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

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

  1. matlab中的字符串数组与函数调用

    1, matlab中的字符串就是1维字符数组,即如: a = 'dddssd'; b = 'lsde'; c = [a, b]; 当然也可以: c= strcat(a, b); 2, matlab中的 ...

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

    matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ...

  3. matlab中的结构体

    今天用imfinfo函数 >> K = imfinfo(‘colorbar_copy1.jpg’) K = 包含以下字段的 struct: Filename: 'E:\matlab\col ...

  4. matlab中reshape 重构数组

    来源:https://ww2.mathworks.cn/help/matlab/ref/reshape.html?searchHighlight=reshape&s_tid=doc_srcht ...

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

    一.创建元胞数组 1.用cell命令创建规格为2*2的空元胞 >> a=cell(2,2) a = [] [] [] [] 2.用大括号"{}"创建元胞数组并赋值 &g ...

  6. matlab中的数组与矩阵

    今天做图像处理时,看到一个矩阵的处理,简要谈谈下面几段代码: 首先是介绍矩阵(说明:在matlab中无是数组还是矩阵都是按列来存储的) 首先是一些特殊矩阵的建立 zeros(m,n)%建立全0矩阵 o ...

  7. Matlab中的基本数据类型介绍

    Matlab中支持的数据类型包括: 逻辑(logical)字符(char)数值(numeric)元胞数组(cell)结构体(structure)表格(table)函数句柄(function handl ...

  8. 学习笔记8—MATLAB中奇异值处理办法

    一.Inf 和 NAN处理 lnf: 无穷大值,可以用islnf或者isfinite函数处理 NAN:不是一个数字,可以用isnan函数来处理 或者:  类似于这种处理 mn(find(mn<= ...

  9. 使用C# .NET 将结构数组绑定到 Windows 窗体的方法

      本任务的内容 概要 要求 设计结构 向数组添加结构实例 将结构成员绑定到窗体控件 提供浏览数组的方式 分步示例 参考 概要 本文介绍如何向 Windows 窗体绑定结构数组. 该示例由一个 Win ...

随机推荐

  1. mongodb 学习笔记 09 -- shard分片

    概述 shard 分片 就是 把不同的数据分在不同的server 模型 当中:     用户对mongodb的操作都是向mongs请求的     configsvr 用于保存,某条数据保存在哪个sha ...

  2. window mac iPhone 三种比较相似的字体

    win: 华文黑体 mac:stheiti iphone:heitisc-light heitisc-medium

  3. 用NodeJs实现延迟调用,规避定时任务的闭包问题

    很多人在用NodeJs的setTimeout(callback, delay[, arg][, ...])编写定时任务时,习惯上直接操作callback外部的对象object(闭包的特点).这样做有一 ...

  4. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  5. Summary: How to calculate PI? Based on Monte Carlo method

    refer to: http://www.stealthcopter.com/blog/2009/09/python-calculating-pi-using-random-numbers/ Duri ...

  6. git 分布式版本控制了解

    今天也来了解一下这个版本控制神器,下面了解一些词语的意思 先说集中式版本系统,版本库是集中放在中央服务器的,干活的时候,都是用自己的电脑,从中央处理器取得最新的版本,干完活后,在把自己的活推送给服务器 ...

  7. PHP提高编程效率的方法,你知道多少呢?

    PHP语言是最WEB的计算机语言,而且也是应用最广泛的语言,那么PHP对编程的影响有多大呢?下面可以去了解一下. 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜 ...

  8. OpenXML: Asp.net利用OpenXML 导出Excel.

    http://www.cnblogs.com/skyfei/archive/0001/01/01/Openxml.html

  9. 当前时间 js

    当前时间-倒计时下载 效果: 代码: <!doctype html> <html> <head> <meta http-equiv="Content ...

  10. C#中volatile的用法

    恐怕比较一下volatile和synchronized的不同是最容易解释清楚的.volatile是变量修饰符,而synchronized则作用于一段代码或方法:看如下三句get代码: int i1;  ...