第五部分 逻辑向量
- 逻辑向量使用关系表达式,结果为真/假值。
5.1 向量和矩阵的关系表达式
- 1、关系运算符可用于向量和矩阵。例如,假设有一个向量vec,我们想将向量中的每个元素都与5进行比较,以确定它是否大于5。结果将是一个具有逻辑真或假值的向量(与原始的长度相同)。
注意,这会创建一个由所有逻辑的真或假值组成的向量。尽管结果是一个由1和0组成的向量,并且可以在向量isg上执行数值操作,但它的类型是logical(逻辑类型),而不是double(双精度浮点型)。
-
为了确定向量vec中有多少元素大于5,可以对生成的向量isg使用求和函数:
-
我们所做的就是创建一个逻辑向量isg。这个逻辑向量可以用来索引原始向量。例如,如果只需要vector中大于5的元素:
这称为逻辑索引。只有vec中逻辑向量isg中对应元素逻辑为真的元素才会返回。 -
2、要创建所有逻辑1或0的向量或矩阵,可以使用函数true和false。
-
ones和zeros函数还可以直接创建逻辑数组。
5.2 逻辑内置函数
-
1、MATLAB中有内置的函数,它们在逻辑向量或矩阵方面很有用;其中两个是any和all函数。如果vector中的任何元素表示为真,则函数any返回逻辑上的真值,否则返回假值。只有当所有元素都表示为true时,函数all才返回逻辑上的true。下面是一些例子。
对于下面的变量vec2,一些但不是全部的元素为真;因此,any返回true, all返回false。
-
2、函数find返回满足给定条件的向量的索引。例如,查找向量中所有大于5的元素:
>> isg
isg =
1 2 5 6 7
>> find(isg>5)
ans =
4 5
- 对于矩阵,find函数在返回满足指定条件的索引时将使用线性索引。例如:
>> mata=randi(10,2,4)
mata =
2 10 9 5
10 5 2 10
>> find(mata==5)
ans =
4
7
对于向量和矩阵,如果没有元素符合条件,则返回空向量。例如:
>> mata
mata =
2 10 9 5
10 5 2 10
>> find(mata==4)
ans =
空的 0×1 double 列向量
- 3、函数isequal在比较数组时很有用。在MATLAB中,对数组使用等式运算符将为每个元素返回1或0;然后可以在结果数组上使用all函数来确定所有元素是否相等。内置函数isequal也可以做到:
然而,一个区别是,如果两个数组的维数不相同,isequal函数将返回逻辑0,而使用相等操作符将导致错误消息。这也适用于字符数组:
- 4、MATLAB中也有用于数组元素的or和and操作符:
运算符 | 功能 |
---|---|
I | 或运算 |
& | 和运算 |
这些操作符将比较任意两个向量或矩阵,只要它们大小相同,一个元素一个元素地比较,并返回逻辑1和0大小相同的向量或矩阵。运算符 II 和 && 仅用于标量,而不是矩阵。例如: |
>> v1=logical([1 0 1 1]);
>> v2=logical([0 0 1 0]);
>> v1&v2
ans =
1×4 logical 数组
0 0 1 0
>> v1|v2
ans =
1×4 logical 数组
1 0 1 1
>> v1&&v2
|| 和 && 运算符的操作数必须能够转换为逻辑标量
值。
- 5、与数值运算符一样,了解运算符优先规则是很重要的。下表按优先级顺序列出了目前已经讨论过的操作符的规则。
运算符优先级顺序(由高到低) | 优先级 |
---|---|
( ) | 最高 |
‘,^ | ↓ |
- ,~ | ↓ |
*, / , \ | ↓ |
+ , - | ↓ |
: | ↓ |
< , >, <= , >= , ~= | ↓ |
& | ↓ |
I | ↓ |
&& | ↓ |
II | 最低 |
5.3 矩阵乘法
矩阵乘法并不意味着逐项相乘;它不是数组操作。矩阵乘法有非常特殊的含义。首先,要将矩阵a与矩阵b相乘得到矩阵c, a的列数必须与b的行数相同。得到的矩阵C与A的行数相同,与B的列数相同:
在MATLAB中,*运算符将执行这个矩阵乘法:
- 1、行向量或列向量的矩阵乘法:它们必须有相同数量的元素,但一个必须是行向量,另一个必须是列向量。例如,对于一个列向量c和行向量r:
在MATLAB中,这些操作是使用*运算符来完成的,*运算符是矩阵乘法运算符。首先,创建列向量c和行向量r。