✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。
????个人主页:算法工程师的学习日志
前言:上篇文章分享了Matlab经常会遇到(),[],与{}三种符号,下面接着捋一捋其他的特殊符号使用方法,主要有
: |
冒号 |
' |
分号 |
& && |
与 |
| || |
或 |
~ |
非 |
. |
点 |
1、:冒号
冒号的主要用途是用来表示数据从开始位置取到/生成到截止位置,例如:
x(i,j,k)的含义是第k层矩阵的第i行第j列元素,x(:,:,1)则表示第1层矩阵,比如:创建多维数组
y=x(1,:),把x这个矩阵的第一行所有列赋给y。
注:冒号相当于所有。
在matlab中,a(:, 1:3)=[]表示将数组a的第1到第3列删除。
第一个冒号( : )表示取数组a的所有行;1:3表示取数组a的第1到第3列。
2:'分号
分号一般用于矩阵转置,其中A.'是一般转置,A'是共轭转置,顾名思义是对矩阵先做共轭运算(不懂共轭的自行百度),再进行转置,在A是实数矩阵时,两者没有区别,但是当A是复矩阵时,就有区别,示例如下:
另外补充一个conj(a)是求a的共轭矩阵,示例如下:
也就是说
启发思考
问:matlab中a(: ).'是什么意思?
答:a(:)作用是把矩阵a转换为列向量,就是一列,a(: ).'是把矩阵a转换为一个行向量,就是一行。
3、逻辑运算
3.1、"&&"与"&"
A&B
(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。
(2)A和B可以为矩阵(e.g. A=[1 0],B=[0 0])。
A&&B
(1)首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。
(2)A和B不能是矩阵,只能是标量。
A&&B 首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用,如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的。另外这也可以防止类似被0除的错误:
flag=denum~=0 && num/denum>10
if flag
%Do Something
end if
上面的表达式就可以防止denum等于0的情况。当然,如果你希望在判断的时候,对A和B表达式都进行计算,就应该使用标准的&或者|。Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。
if flag=denum~=0 && num/denum>10
%Do Something
end if
与
if flag=denum~=0 & num/denum>10
%Do Something
end if
3.2、"||"与"|"
"||"与"|"的使用同"&&"与"&"
3.3、~
非(或逻辑非)是一元操作符,即~A:当A是非零时结果为“0”;当A为“0”时,结果为“1”.因此下列两种表示:
p | (~p) 结果为1
p & (~p) 结果为0
额外小tips:
any和all函数在连接操作时很有用,设x是0-1向量,如果x中任意有一元素非零时,any(x)返回“1”,否则返回“0”;all(x)函数当x的所有元素非零时,返回“1”,否则也返回“0”.这些函数在if语句中经常被用到.如:
这种方式经常用来判断数组的数据是否满足特定要求。
4、.点
.点在matlab中主要用于矩阵元素计算,例如:乘是代表两个矩阵相乘,只要符合矩阵相乘的规则即可,而点乘对应的是矩阵中元素的相乘,在最新的Matlab上,不要求两个矩阵的维度一定要相同,老点的版本可能会报错,提示矩阵维度不相同。
老版本:
C=A.*B
错误使用 .*
矩阵维度必须一致
新版本:
也就是说新版本的A.*B在矩阵非同维度的情况下,Matlab会自动补齐维度
上文链接:1.基础知识(4) --Matlab中(),[],与{}的区别