本篇博客继续MATLAB基础的学习,其实这篇博客可以和上篇合并在一起的,但感觉篇幅太长了,所以还是分成了两篇博客,这样子的学习总结效率也更高。
MATLAB中的运算符,分为算术运算符、关系运算符以及逻辑运算符,这三种运算符具体的解释我觉得应该没啥好解释的,学过编程语言的都肯定知道。这三个运算符按优先级排序的话,算数运算符最高,关系运算符次之,最低级别的则是逻辑运算符。
算术运算符
算术运算符,就是加减乘除那些,a+b
、a*b
、a-b
、a/b
、a^b
这些应该很好理解,a.*b
的话,直观上就是a与b对应的元素相乘(这里要求a和b是相同维度的矩阵)。a./b
也很好理解,对应元素相除。a.^b
则是a的每个元素的b次幂。
关系运算符
<小于 >大于 ==等于 <=小于等于 >= 大于等于 ~=不等于。
逻辑运算符
&与|或~非
这里需要讨论的是,矩阵和矩阵是怎么进行逻辑运算的。进行逻辑运算的矩阵,必须有相同的维度,然后两个矩阵对应的元素进行逻辑比较,结果返回1或0值,所有元素比较下来,生成一个逻辑数组。
其他的逻辑函数,比如xor(x,y)
,异或运算,x与有不同返回1,相同返回0。any(x)
向量中有任何元素是非零,返回1,否则返回0;如果是矩阵,每一列中有非零元素返回1,否则返回0。all(x)
这个则是要所有元素都是非零,才返回1,否则返回0。
字符串处理
- 字符串连接
>> str1 = 'how are you'
str1 =
'how are you'
>> str2 = 'i am fine'
str2 =
'i am fine'
>> str = strcat(str1,str2)
str =
'how are youi am fine'
构造多行字符串,如果写在[]内,则多行字符串的长度必须相同;如果写在{}内,则字符串长度可以不同。
>> b = ['abnormal','business','cat']
b =
'abnormalbusinesscat'
>> a = {'abnormal';'business';'cat'}
a =
3×1 cell 数组
{'abnormal'}
{'business'}
{'cat' }
>> a = ['abnormal';'business';'cat']
要串联的数组的维度不一致。
当然,如果字符串之间的间隔改为逗号,则上述的程序不会报错。
>> a = strvcat('i','','am','','poppy')
a =
3×5 char 数组
'i '
'am '
'poppy'
>> a = char('i','','am','','poppy')
a =
5×5 char 数组
'i '
' '
'am '
' '
'poppy'
可以看到char函数会把空字符串也用空格补偿后在进行连接。
- 字符串比较
>> strcmp('china','catch')
ans =
logical
0
>> ('china' == 'catch')
ans =
1×5 logical 数组
1 0 0 0 0
用关系运算符进行比较时,返回值是一个与字符串长度相同大小的数组,这时要求两个字符串长度必须相同。strcmp函数则无这一要求。
- 查找和替换
字符串查找
>> string = 'i am a soidor,put your hands up and dont move!'
string =
'i am a soidor,put your hands up and dont move!'
>> findstr(string,' ')
ans =
2 5 7 18 23 29 32 36 41
>> findstr(string,'o')
ans =
9 12 20 38 43
字符串修改
>> string
string =
'i am a soidor,put your hands up and dont move!'
>> strrep(string,'your','my')
ans =
'i am a soidor,put my hands up and dont move!''
相关补充
triu
构造上三角矩阵,tril
构造下三角矩阵。
>> a = triu(randn(4))
a =
0.6715 0.4889 0.2939 -1.0689
0 1.0347 -0.7873 -0.8095
0 0 0.8884 -2.9443
0 0 0 1.4384
>> a = triu(randn(4),2)
a =
0 0 -0.8649 1.0933
0 0 0 1.1093
0 0 0 0
0 0 0 0
>> tril(ones(4,5))
ans =
1 0 0 0 0
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
>> tril(ones(4,5),1)
ans =
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
squeeze
函数去掉size中为的维度:
>> a = randn(3,1,2)
a(:,:,1) =
-1.2141
-1.1135
-0.0068
a(:,:,2) =
1.5326
-0.7697
0.3714
>> a = squeeze(a)
a =
-1.2141 1.5326
-1.1135 -0.7697
-0.0068 0.3714
a =
-1.2141 1.5326
-1.1135 -0.7697
-0.0068 0.3714
>> a(:) % 将a的每一列合并成一个长的列向量
ans =
-1.2141
-1.1135
-0.0068
1.5326
-0.7697
0.3714