MATLAB 单元数组 cell 和结构体 struct 的用法以及区别
1. 前言
Matlab单元数组cell和结构体struct都可以将不同类型的相关数据集成到一个单一的变量中,使得大量的相关数据的处理变得非常简单而且方便。但是,需要注意的是,单元数组和结构体只是承载其他数据类型的容器,大部分的数学运算是针对两者之中具体的数据进行,而不是针对单元数组或结构体本身进行。
单元数组中的每一个单元是通过一个数字来进行索引的,但用户需要加入到一个单元中或者从一个单元提取数据时,需要给出单元数组中该单元的索引。结构体和单元数组十分相似,两者的区别在于,结构体中的数据存储并不是由数字来标示,而是通过结构体中的名称来进行标示的。
2. 单元数组的创建和操作
单元数组中的每一个元素称为单元cell,单元中可以包含任何类型的Matlab数据,即可以是数组,字符,符号对象,单元数组或结构体等。理论上,单元数组可以创建任意数的单元数组,大多数情况下,为简单起见,创建简单的单元数组(如一维单元数组)。单元数组的创建方法可以分为两种,通过赋值语句直接创建;或通过cell函数首先为单元数组分配内存空间,然后再对每个单元赋值。
直接通过赋值语句创建单元数组时,可以采用两种方法来进行,即按单元索引法和内容索引法。按单元索引法赋值时,采用标准数组的赋值方法,赋值时赋给单元的数值通过花括号{}将单元内容括起来。按内容索引法赋值时,将花括号写在等号左边,即放在单元数组名称后。下面通过例子说明这两种赋值方法。
>>clear A % 保证赋值的单元数组名称不重名
>>%按单元索引法赋值
>>A(1,1)={[1 3 5;2 4 6; 1 4 7]};
>>A(1,2)={3+5i};
>>A(2,1)={'Tsinghua in Beijing'};
>>A(2,2)={0:pi/5:pi};
>>A
A= [3x3double] [3.0000+5.0000i]
'Tsinghua in Beijing' [1x6 double]
>> 按内容索引法赋值
>>B{1,1}=[1 2 3;4 5 6;7 8 9];
>>B{1,2}=2+3i;
>>B{2,1}='Beijing Univ';
>>B{2,2}=1:2:13;
>>B
B= [3x3double] [2.0000+3.0000i]
'Beijing Univ' [1x7double]
按单元索引法和按内容索引法所创建的单元是等效的。但需要注意的是,用花括号可以访问单元数组单元的内容,而圆括号则只用于表示单元数组的单元而不显示单元数组单元的内容。
>>B{2,2}
ans=
1 3 5 7 9 11 13
>>B(2,2)
ans=
[1x7 double]
>>A{2,:}
ans=
Tsinghua in Beijing
ans=
0 0.6283 1.2566 1.8850 2.5133 3.1416
单元数组创建的另一种方法是通过cell函数来进行创建。在创建时,可以采用cell函数生成空的单元数组,为单元数组分配内存,然后,再向单元数组内存储内容。
>>D=cell(2,3)
D=
[] [] []
[] [] []
>>D{1,1}=randperm(5)
D=
[1x5 double] [] []
[] [] []
3. 结构体创建
结构体struct和单元数组非常相似,也是将不同类型的数据集中在一个单独变量中,结构体通过字段fields来对元素进行索引,在访问时只需通过点号来访问数据变量,结构体可以通过两种方法进行创建,即通过直接赋值方式创建或通过struct函数来创建。
>>%直接赋值方法创建结构体
>>circle.radius=3.0;
>>circle.center=[0 0];
>>circle.color='red';
>>circle.linestyle='--'
circle=
radius:3
center:[0 0];
color:'red'
linestyle:'--'
>>%用struct函数创建
>>data1={3.0,5.0,'sqrt(7)'};
>>data2={[0 0][1 1][3 5]};
>>data3={'--''...''-.-'};
>>data4={'red''blue''yellow'};
>>data5={'yes''no''no'};
>>circle=struct('radius',data1,'center',data2,'linestyle',data3,'color',data4,'filled',data5)
circle=
1x3 struct array with fields:
radius
center
linestyle
color
filled
4. 使用场景举例
未完 ......
点击访问原文(进入后根据右侧标签,快速定位到本文)
MATLAB 单元数组 cell 和结构体 struct 的用法以及区别的更多相关文章
- 关于c#的结构体struct与class的区别
C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...
- matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields
一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...
- matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段
一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...
- 结构体(struct)
结构体 结构体是将不同类型的数据按照一定的功能需求进行整体封装,封装的数据类型与大小均可以由用户指定. 1 结构体的声明.定义及初始化 1.1 声明结构体类型 struct 结构体名 { 成员列表: ...
- Matlab单元(Cell)数据的应用
MATLAB里面的cell有的翻译为单元有的翻译为细胞型数据.它是MATLAB的一种特殊数据类型,可以将它看作是一种无所不包的广义矩阵.组成cell的元素可以是任何一种数据类型的常数或者常量,每一个元 ...
- C语言结构体-struct
知识点: 1)结构体的定义. 2)结构体的sizeof. 3) 结构体的指针. 1) 结构体的定义: 在逻辑上有一定关联的多个数据类型做为一整体进行操作的数据结构,它的关键字是struct.下面我将 ...
- 内核中用于数据接收的结构体struct msghdr(转)
内核中用于数据接收的结构体struct msghdr(转) 我们从一个实际的数据包发送的例子入手,来看看其发送的具体流程,以及过程中涉及到的相关数据结构.在我们的虚拟机上发送icmp回显请求包,pin ...
- 结构体(struct)大小
结构体(struct)大小 本文参考链接:C语言结构体(struct)常见使用方法,链接中的实例代码经实践有几处不准确,本文在引用时已做更改 注意:在结构体定义时不能申请空间(除非是结构体变量),不可 ...
- 结构体struct、联合体union、枚举类型enum
1.c语言中的类型 1)内置类型——char,short,int,float,double: 2)用户自定义类型(UDT)——struct结构体,union联合体,enum枚举类型 2.内存对齐 2. ...
随机推荐
- 使用Android的日志工具Log
Android中的日志工具类是Log,这个类中提供了5个方法来供我们打印日志 1.Log.v()用于打印那些最为琐碎的,意义最小的日志信息.对应级别verbose,是Android日志里面级别最低的一 ...
- encode(编码)和decode(解码)方法
JS对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...
- SignalR简单实用_转自:https://www.cnblogs.com/humble/p/3851205.html
一.指定通信方式 建立一个通讯方式需要一定的时间和客户机/服务器资源.如果客户机的功能是已知的,那么通信方式在客户端连接开始的时候就可以指定.下面的代码片段演示了使用AJAX长轮询方式来启动一个连接, ...
- jQuery学习笔记——事件
何为事件 就是你的鼠标,键盘等对网页元素进行的操作. 常见事件 鼠标事件 键盘事件 表单事件 文档/窗口事件 click keypress submit load dblclick keydown c ...
- 使用sqlyog连接 Mysql 出现1251错误
错误如图所示: 错误详情信息: client does not support authentication protocol requested by server;consider upgradi ...
- OSG学习笔记0——解决OSG读obj模型问题[转]
原文:https://blog.csdn.net/u011310341/article/details/51179948 #include "stdafx.h" #include& ...
- 深入理解JS中&&和||
写了这么多JS,才发现JS的语法既是属于C语系的,又与一般C语系的编程语言某些地方有很大区别,其中&&和||就是其中一例. C语系中的&&和|| C语系的&&a ...
- ActiveMQ处理模式
一.PTP处理模式(Queue) 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息. 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消 ...
- Linux安装Windows字体
Linux系统使用Windows系统字体的方法 2017年12月26日 09:35:54 知行合一2018 阅读数 1989更多 分类专栏: 杂项 版权声明:本文为博主原创文章,遵循CC 4.0 ...
- SpringCloud-Eureka配置instanceId显示IP
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: preferIpAddress: tr ...