ndarray的向量化的特性,对逻辑运算也是适用的。但是,关于多维数组的逻辑运算不至于得到一个布尔数组的结果,还可以基于布尔索引与逻辑运算相结合,实现更加灵活的数据筛选。
本文的主要内容有:
1、ndarray的比较运算
2、逻辑运算符的使用
3、三元运算函数where
4、通用判断函数any和all
ndarray的比较运算其实关于多维数组ndarray的比较运算,在前面的内容中,已经有所涉及。其实,更常用的比较运算,是将数组与某个标量进行比较,利用向量化的特性,将比较运算应用到数组中的每一个元素,从而可以得到一个布尔数组。更进一步,ndarray支持使用布尔数组进行索引,所以,可以实现对数组进行满足特定的条件的元素的筛选需求。
直接看对应的代码:
逻辑运算符的使用除了单个条件进行数组元素的筛选之外,NumPy还提供了逻辑运算符,从而实现条件的组合,实现更加复杂的数据筛选需求。
总共有如下逻辑运算符:
1、np.logical_and()
用于两个条件并且的关系,数组元素筛选语境中,表示求两个集合交集的操作。也就是获取同时满足两个条件的数据。
可以使用运算符 & 进行简化,两者是等价的。
2、np.logical_or()
用于两个条件或的关系,数组元素筛选语境中,表示求两个集合并集的操作。也就是获取满足至少任意一个条件的数据。
可以使用运算符 | 进行简化,两者是等价的。
3、np.logical_not()
用于取反的逻辑运算,表示获取不满足该条件的数据元素。但是,通常来说,我们会自行进行条件的取反操作,而不是通过np.logical_not()来进行取反。
可以使用运算符 ~ 进行简化,两者是等价的。
4、np.logical_xor()
逻辑异或的概念,也就是获取两个条件不同时为真、也不同时为假的数据。
可以简化为操作符 ^,两者是等价的。
下面通过代码进行举例说明:
三元运算函数where由于逻辑运算返回的结果是布尔数组,有时不是太方便。所以,NumPy还提供了np.where()函数,可以根据条件返回元素的索引或根据条件生成新的数组。
通过代码演示下np.where()函数的使用:
通用判断函数any和allNumPy中提供的逻辑运算,除了上面的内容外,还有用于实现所有元素都为真,或者至少有一个元素为真,这两种场景的数据筛选需求。
比较简单,直接通过代码进行举例说明:
总结本文简单介绍了NumPy支持的比较常用的逻辑运算,包括比较运算、逻辑运算符、三元运算,以及any和all的语义。基于这些操作的组合,就可以实现比较灵活的数组元素的筛选了。当然,NumPy中还提供了更多的、更复杂的逻辑运算操作。但是,更复杂的内容,其实,我们可以借助Pandas更加简洁的实现。所以,这里就不再展开了。
以上,就是本文的全部内容,感谢您的拨冗阅读!