前言
众所周知,数据作为一个被处理的对象,它被分为多种类型,而在MATLAB中就有15种基本的数据类型,且每种数据类型的数据都以矩阵或数组的形式存在,基本数据类型的表示都是用英文小写字符表示,本篇将对一些常用的数据类型做介绍,包括数值、逻辑型数值、字符串、单元数组和结构体。
数值
数值型的数据包括有符号和无符号的整数(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}')
两种创建的结果虽然还有一点小区别,不知道哪里操作出了点小问题,但是要创建的形式还是成功表明了。