「Python数据科学」ndarray的逻辑运算与更灵活的数据筛选

南宫理的日志录 2024-12-25 16:58:22
引言

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和all

NumPy中提供的逻辑运算,除了上面的内容外,还有用于实现所有元素都为真,或者至少有一个元素为真,这两种场景的数据筛选需求。

比较简单,直接通过代码进行举例说明:

总结

本文简单介绍了NumPy支持的比较常用的逻辑运算,包括比较运算、逻辑运算符、三元运算,以及any和all的语义。基于这些操作的组合,就可以实现比较灵活的数组元素的筛选了。当然,NumPy中还提供了更多的、更复杂的逻辑运算操作。但是,更复杂的内容,其实,我们可以借助Pandas更加简洁的实现。所以,这里就不再展开了。

以上,就是本文的全部内容,感谢您的拨冗阅读!

0 阅读:7
南宫理的日志录

南宫理的日志录

深耕IT科技,探索技术与人文的交集