小学时候咱们就知道,数学中有天然数、整数、分数、小数等等不少种类型的数。到了中学,咱们又发现了其实还有无理数、复数这些有些特殊的数。到了大学学了高等数学以后,咱们又知道了其实还存在着无穷大、无穷小这样“难以想象”的“数”。
为了对各类数据类型都可以作到有效处理,Matlab中也规定了一系列不一样的数据类型,下面对其进行一一介绍。算法
数值类型其实就对应于数学中的各类类型的数,包括下面几种:数组
现实世界中不少事情都是真假之间,好比真假美猴王,真钱假钱,真相与假象...Matlab世界也存在着这种用于判断真假的数据类型,一般0表示假(0表示无,什么都没有,四大皆空,固然是假),而非0的数表示真。函数
在数学中,咱们也常常会遇到判断真假的问题,好比判断1>2
这个式子是否成立。Matlab中提供了一系列的关系运算符:编码
关系运算符 | 含义 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
== | 等于 |
~= | 不等于 |
下面将用一段Matlab代码来展示这些关系运算符的用法:spa
?1>2 % 由于1不大于2,因此结果是假,输出0 ans = 0 ?1<=2 % 由于1是小于等于2的,因此结果是真,输出1 ans = 1 ?1~=2 % 由于1是不等于2的,因此结果是真,输出1 ans = 1 ?1==2 % 由于1不等于2,因此结果是假,输出0 ans = 0
除了关系运算符之外,Matlab中还有3个逻辑运算符:与、或、非,是对运算数按二进制位进行运算的:code
逻辑运算符 | 含义 |
---|---|
& | (按位)与,两个数都为真结果才为真,不然结果为假 |
| | (按位)或,两个数至少有一个为真,结果才为真,不然结果为假 |
~ | (按位)非,对单个数进行操做,若该数为真,则结果为假,不然为真 |
代码举例以下:对象
?2&5 % 由于2和5都是非零的数,因此都为真,它们的与运算结果也是真 ans = 1 ?2&0 % 由于2是非零的数,表示真,而0表示假,因此它们的与运算结果是假 ans = 0 ?2 | 5 % 由于2和5都表示真,因此它们的或运算结果也为真 ans = 1 ?2 | 0 % 由于2表示真,0表示假,因此两个数中有一个数是真,因此结果也是真 ans = 1 ?~0 % 由于0表示假,因此它的非运算的结果就相反,为真 ans = 1 ?~2 % 由于2表示真,因此它的非运算结果为假 ans = 0
还记得在咱们的第一篇Hello World程序中用disp
函数输出Hello World
吗?里面的"Hello World"其实就是一个字符串,它实际上是由多个单字符组成的字符数组,请看示例代码:element
?str = 'Hello World'; % 字符串要使用单引号括起来,不要使用双引号 ?disp(str) Hello World ?size(str) % 求字符串str的长度,返回的结果为:[1,11],表示str是一个1维、有11个元素的数组 ans = 1 11 ?str(1,5) % 显示str的第1行、第5个元素(注意:下标是从1开始的) ans = o ?str(7) % 显示str的第7个元素 ans = W ?abs(str) % 求str每一个元素的绝对值(显示字母的ASCII码,若是是中文,则将显示字符的unicode编码) ans = 72 101 108 108 111 32 87 111 114 108 100 ?abs(str(1)) % 求str第一个元素的绝对值,返回72,这正是字母'H'的ASCII码 ans = 72
结构体类型是一种特殊的数据类型,至关于其余面向对象语言中的对象,也能够当作是C语言中的结构体类型。unicode
建立结构体类型的方法十分简单:结构体名称.字段名称 = 字段值
,而且支持嵌套。字符串
下面给出一段示例程序,用于建立一个名为Person的结构体,它有name、age、language(会说的语言,是一个单元数组,后面讲)、score(成绩,也是一个结构体)四个属性:
?Person.name = 'Tom'; ?Person.age = 20; ?Person.language = {'Chinese','Spanish'}; ?score.Math = 78; ?score.English = 98; ?Person.score = score; ?Person Person = name: 'Tom' age: 20 score: [1x1 struct] language: {'Chinese' 'Spanish'} ?Person.score ans = Math: 78 English: 98
数组是一堆元素的集合,这些元素能够是数值类型,也能够是字符串、结构体等类型。同一个数组中的元素的数据类型必须都相同。数组的运算其实是对数组中的每一个元素同时进行运算。
矩阵能够当作是多维数组,矩阵的运算遵循线性代数运算法则。矩阵将在后面的Blog中进行详细介绍。
建立数组有以下几种方式:
下面用实例代码介绍一下建立数组的几种方式:
?array = [1,2,3,4,5] % 枚举式,逐一列举数组中的每一个元素,元素之间用逗号隔开,也能够用空格隔开 array = 1 2 3 4 5 ?array2 = 1:5 % 等差数列式,以等差数组的形式建立数组,分别给出首、尾元素和步长(即等差数列的公差),步长为1时能够省略 array2 = 1 2 3 4 5 ?array3 = 1:2:6 % 等差数列式,这里步长为2,能够看出,结果并不必定会包含尾元素 array3 = 1 3 5 ?array4 = linspace(1,5,6) % 区间线性分割式,调用linspace函数,前两个参数分别为被分割区间的下限和上限(闭区间),第三个参数为分割个数 array4 = 1.0000 1.8000 2.6000 3.4000 4.2000 5.0000
单元数组其实是一种广义的矩阵,与矩阵不一样的是,单元数组能够容纳不一样数据类型的元素,经过大括号'{}'来界定数组元素。假如cell是一个单元数组,那么能够经过cell{i,j}
的方式来获取cell的元素。
实例代码以下:
?cell1 = {'demo',1:2:10,5} cell1 = 'demo' [1x5 double] [5] ?whos cell1 Name Size Bytes Class cell1 1x3 332 cell array Grand total is 13 elements using 332 bytes ?cell{1,3} ans = 5 ?cell2 = {'demo2','hello';5:-1:0,Inf} cell2 = 'demo2' 'hello' [1x6 double] [ Inf] ?whos cell2 Name Size Bytes Class cell2 2x2 444 cell array Grand total is 21 elements using 444 bytes ?cell2{2,2} ans = Inf ?a = cell(2,2) % 调用cell函数来建立一个空的单元数组 a = [] [] [] [] ?a{1,2} = 5 a = [] [5] [] [] ?whos a Name Size Bytes Class a 2x2 112 cell array Grand total is 5 elements using 112 bytes
这里要注意的一点是,对于字符串类型,实际上是字符数组,那么怎么表示多个字符串组成的数组呢?若是用通常数组表示,会发现出了问题(全部字符串都链接到一块儿了):
?strs = ['aa','bcd','ef']; ?strs strs = aabcdef
那么这个时候就能够用单元数组来表示多个字符串的数组了,就不会存在这个问题:
?strs2 = {'aa','bcd','ef'}; ?strs2 strs2 = 'aa' 'bcd' 'ef'
map是一种"键-值"对类型的数据类型,是Matlab R2012a
版本新增的数据类型,因此下面的示例代码是在正式版Matlab上运行的而非精简版Matlab。能够经过containers.Map
函数建立一个map对象,示例代码以下:
>> data = containers.Map({'name','age','location'},{'Tom',20,'USA'}); >> data data = Map with properties: Count: 3 KeyType: char ValueType: any >> whos data Name Size Bytes Class Attributes data 3x1 8 containers.Map >> data('name') ans = 'Tom'