专栏首页电子狂人Matlab系列之数据类型

Matlab系列之数据类型

众所周知,数据作为一个被处理的对象,它被分为多种类型,而在MATLAB中就有15种基本的数据类型,且每种数据类型的数据都以矩阵或数组的形式存在,基本数据类型的表示都是用英文小写字符表示,本篇将对一些常用的数据类型做介绍,包括数值、逻辑型数值、字符串、单元数组和结构体。

~Show Time~

数值

数值型的数据包括有符号和无符号的整数(int)、单精度(single)和双精度(double)浮点数(float);

其中整数类型比较好解释,直接看下表:

数据类型

数值范围

函数定义标识符

单精度8位整数

-2^7~2^7-1

int8

单精度16位整数

-2^15~2^15-1

int16

单精度32位整数

-2^31~2^31-1

int32

单精度64位整数

-2^63~2^63-1

int64

无符号8位整数

0~2^8-1

uint8

无符号16位整数

0~2^16-1

uint16

无符号32位整数

0~2^32-1

uint32

无符号64位整数

0~2^64-1

uint64

也许看到这么多的数据类型,你突然会想问,我没有去特意去定义数据的类型,这数据又会是怎样的类型呢?其实,MATLAB存储数值数据的默认类型是双精度浮点数,若要存储为整数类型的数据则需要使用上表中的定义标识符进行数据类型的转换,此外还能使用表中的定义标识符将其他数据类型转换成整型的数据,接下来使用Matlab实际操作举例看看:

首先建立一个有符号的整数

然后使用命令“whos”进行查看变量“x”所表示的数据的相关信息

也可以只使用class函数查看其数据类型

最后再使用定义标识符将其他类型的数据进行转换:

如果你仔细输出的结果即ans的数,会发现这个不就是字符串所代表的ASCII码吗?介绍完整数类型,接着对浮点数进行介绍,在MATLAB中的浮点数可以用双精度或单精度表示,默认为双精度,可用定义标识符将其转换为单精度的。

对于双精度型的数据,在MATLAB中都按照一个特定的标准进行构造,首先该种类型的数据都有64位,从0~63开始划分,0~51用于数xx.f的小数f;52~62用于指数,其偏差为1023;最后63位用于符号位的表示,即0正1负。

不知道你对双精度值的最大最小数是否感兴趣,接下来将使用一串你也许熟悉的形式进行获取,废话不多说,直接看操作:

代码:

str='The range for double is :\n\t%g to %g';

sprintf(str,realmin,realmax)

代码中的str就是自定义的一个变量,单引号中的是一串字符,其中\n和\t是转义字符,%g用于规定输出的数据格式,这些与c语言之类的编码语言都很相似,就不再做过多的表述;上图的sprintf的作用就是将realmin和realmax代表的数写入字符串,分别对应两个%g的位置,而realmin和realmax就是我们想要的双精度值的最大和最小值。

上面有讲到可使用定义标识符将双精度的数据类型转换为整数型,因此反过来将整数型或者其他类型的转换为双精度型或者单精度型显然也是成立的,举例结果:

若需要单精度,将“double”换成“single”即可。

在数值中还有一些特殊的数,如复数和无穷大数,无穷大数就是昨天所发的通用命令里头的inf,理解起来比较简单,加个负号即-inf代表的就是负无穷大;稍微简单讲述下复数,在MATLAB中,复数的表示都是用字母“i”或“j”,这边介绍两个建立复数的方法,其一:直接生成,即:

直接在命令行窗口输入:“x=6+23j”,通过观察结果也可以发现,使用了i表示自行输入的j;

其二:使用函数complex进行生成,即:

其中x和y是产生一个随机数并与一个常数相乘所得,然后再使用函数complex产生复数,x代表的为实数,y则代表的为虚数。

逻辑型数值

该种类型的数据更好理解,就是我们常说的“1”和“0”这两种用于表示真与假状态的数,更多的是利用函数或者运算符返回逻辑真与假,也许你经常见到类似这样的代码:if(num~=623).....,这就是通过利用运算符来判断,此处代表的就是如果变量num不等于623则会运行以下的代码,运行下相关代码,看下结果就知道了:

字符串

字符串的样子在数值那一类中也已经展现过了,就是使用单引号将需要编辑的字符串进行存储,再举个简单的例子:

这句子也是不久前看到的一个,挺有意思的,希望看到这句话的你可以不需要体会这种单元数组

单元数组这种类型的就比较特殊,是一种我觉得比较强大的矩阵,感觉是无所不容,组成单元数组的每一个元素称为一个单元,每一个单元可以包括一个任意数据类构成的数组,如数值、字符串、结构体以及另外的单元数组,从而会使得每一个单元都可具有不同的尺寸和内存占用空间。

从上面的介绍可以猜到,在MATLAB中使用单元数组的目的就是在于将不同类型的数据归到一个数组当中。

构建单元数组也可以有两种方法:

其一,直接生成,即:

其中使用的括号和之前构建矩阵时用到的“[]”不同,是个花括号“{}”,其中划分行列的方式与构建矩阵的相同。

其二:使用cell函数创建:

可以看到直接创建了一个2行3列的单元数组。

也许你不知道创建这样的一个空的单元数组会有什么用,可以告诉你一个目的,那就是“为该单元数组预先分配连续的存储空间,以节约内存分配占用.....”,看到这句话,不知道在使用Matlab的时候,你是否看到过呢~结构体

结构体,顾名思义,一个可以由不同类型的数据封装成的一个结构体对象,就好像我们的身体,由脑袋、手臂、胳膊、腿等等构成,创建的办法还是有两种:

其一,直接通过字段赋值来创建,即采用“结构体名称.字段名称”的形式创建,举例,并使用whos查看结构体信息:

其二,使用struct函数直接创建,即:

Now=struct('Year','2020年','Month','6月','Date','23日','Time','{shi,fen,miao}')

两种创建的结果虽然还有一点小区别,不知道哪里操作出了点小问题,但是要创建的形式还是成功表明了

本文分享自微信公众号 - 电子狂人(DZKR666),作者:狂人V

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Matlab系列之矩阵秀

    上次讲完了数组的基本操作,不知道是否熟悉使用了,本篇将要对矩阵部分的操作再进行介绍,这部分的内容我觉得蛮有意思的,不过你们觉不觉得我就不知了,但还是想让你们可以...

    狂人V
  • Matlab系列之数组(矩阵)的生成

    从本篇开始,会有一段时间都将用于记录数组、矩阵的操作等等,如果以前没有接触过相关的,可能会觉得要展示的是很复杂的东西,但并不是,这是一个很简单的部分,但也是一个...

    狂人V
  • 基于System Generator的数字滤波器(Simulink验证+Block设计+FPGA的仿真验证)

    首先打开System Generator 2018.2,不清楚咋打开的可以看下我前两天发的,等待MATLAB启动完成后,再打开simulink并且建立一个空白模...

    狂人V
  • 二维数组与稀疏矩阵的互转

    深浅无解
  • 可解释的CNN

    Quanshi Zhang, Ying Nian Wu, Song-Chun Zhu

    用户1908973
  • 牛掰!我是这么把博客粉丝转到公众号的

    纯洁的微笑推荐了一篇文章,题目没有任何特色,叫做《我是怎么把博客粉丝转到公众号的》,但读完后,我震惊了——原来还有这种骚操作啊!

    沉默王二
  • html中引入调用另一个公用html模板文件的方法

    查了一下资料,发现html中引入调用另一个html的方法有很多种,我都尝试了一下,就把他们都列出来吧: 其中推荐第一种和第六种,因为代码太长就写在最后了。其他的...

    德顺
  • 紧握时代机遇,共创美好未来 英特尔产品赋能“新基建”建设

    新冠病毒的全球蔓延对世界经济无疑造成严重影响,但危机中往往潜藏着机遇。此次疫情加速了国家对未来的投资速度与力度,34万亿元“新基建”的启动表面上与我们关系不大,...

    云上计算
  • 公有云使用上升,私有云使用下降

    根据Interop ITX和InformationWeek的调查报告,公有云的使用率从2012年的30%几乎翻了一番,达到了57%,而私有云的使用率已经从52%...

    静一
  • 公有云使用上升,私有云使用下降

    根据Interop ITX和InformationWeek的调查报告,公有云的使用率从2012年的30%几乎翻了一番,达到了57%,而私有云的使用率已经从52%...

    SDNLAB

扫码关注云+社区

领取腾讯云代金券