概述
上一节的内容中,我们介绍了索引的使用方法。索引的目的是为了取出矩阵中的一部分元素,因此我们知道通过元素在矩阵中的位置我们可以实现索引。在本节中,我们将介绍 MATLAB 中的逻辑变量以及通过逻辑变量索引的方法。
MATLAB 中存在一种 logical(逻辑)类型用于表示逻辑上的真和假。在其他程序语言中,这样的一种类型也叫做 bool 型变量。这一种变量本身只有两种值,分别为 true 和 false。规定 false 对应数值 0,true 对应其他值(特别地,使用时可以用任意非零值代表 true,但存储时会自动转为 1 代表 true,这样的好处是只需要占用一个比特的空间)。
逻辑变量
logical 变量只存在两种值 true(真)或者 false(假),规定分别用数字 1 和 0 存储。以逻辑值组成的矩阵称为逻辑矩阵。一般有以下几种创建逻辑矩阵的方法,各有用处。
方法一:直接赋值法
直接用 true,false 直接赋值到一个矩阵,缺点操作复杂,一般不考虑这种方法。
1 | x = [true false] % 正确实例 |
输出值
1 | x = |
方法二:logical 函数法
logical 函数是将数值或矩阵转换为逻辑值的函数。遵循的转换规则为:非零值为逻辑 1,零值为逻辑 0。这种方法将一个矩阵非零值对应转为逻辑矩阵中的 1。可以用作非零值的逻辑索引。
函数法
1 | % logical |
命令行输出
1 | % logical |
方法三:借用逻辑表达式(命题)
命题就是判断一个事件的陈述句。对于数值来说一个判断的陈述句通过关系运算符连接。
MATLAB 的关系运算符共 6 个:等于(==),不等于(~=),大于等于(>=),大于(>),小于等于(<=),小于(<)。
这种方法创建逻辑矩阵最为常见,能够很高效地创建对应的逻辑矩阵,同时进行逻辑运算并作为索引
逻辑表达式
1 | % 逻辑表达式 |
命令行输出
1 | % 逻辑表达式 |
逻辑表达式的运算
对于逻辑值之间的运算,可以实现逻辑表达式的复合运算,这时可以实现联合条件的逻辑索引。有四种运算:逻辑与(&,&&),逻辑或(|,||),逻辑异或(xor 函数)和逻辑非(~)。这四种逻辑运算服从以下的真值表。
逻辑真值表
A | B | A&B | A|B | xor(A,B) | ~A |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
应用实例
1 | A = [1 0 3;0 5 6]; |
命令行输出
1 | % & 与 |
find 函数——逻辑索引的辅助工具
find 函数是将逻辑矩阵索引直接转换为直接索引(下标位置)的函数。我们有时候作出了判断,但是却需要直接索引的信息,这时可以利用find 函数进行转换;另一个用处是,找到前n个满足条件的索引
1 | % find函数 |
命令行输出
1 | % find函数 |
重在应用
以下是逻辑数组的三种基本应用,根据判断条件进行,逻辑索引查找,替换和删除。
1.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],依次找出其中在区间 [2,6] 中的数。
1 | % 查找 |
2.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],依次将其中在区间 [2,6] 中的数替换为 10。
1 | % 替换 |
3.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],删除其中在区间 [2,6] 中的数。
1 | % 删除(要求在矩阵 A 中改变值) |
参考思路
1.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],依次找出其中在区间 [2,6] 中的数。
1 | % 查找 |
2.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],依次将其中在区间 [2,6] 中的数替换为 10。
1 | % 替换 |
3.一组数据 [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],删除其中在区间 [2,6] 中的数。
1 | % 删除 |
小结
本节内容不多,但是逻辑索引比起线性地址的等间距索引索引的产生要更加普遍,所以,希望读者熟练掌握这三种基本应用。