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

引言

ndarray的向量化的特性,对逻辑运算也是适用的。但是,关于多维数组的逻辑运算不至于得到一个布尔数组的结果,还可以基于布尔索引与逻辑运算相结合,实现更加灵活的数据筛选。

本文的主要内容有:

1、ndarray的比较运算

2、逻辑运算符的使用

3、三元运算函数where

4、通用判断函数any和all

ndarray的比较运算

其实关于多维数组ndarray的比较运算,在前面的内容中,已经有所涉及。其实,更常用的比较运算,是将数组与某个标量进行比较,利用向量化的特性,将比较运算应用到数组中的每一个元素,从而可以得到一个布尔数组。更进一步,ndarray支持使用布尔数组进行索引,所以,可以实现对数组进行满足特定的条件的元素的筛选需求。

直接看对应的代码:

a1f1873742d89b838f41da191f9716c0.jpeg

逻辑运算符的使用

除了单个条件进行数组元素的筛选之外,NumPy还提供了逻辑运算符,从而实现条件的组合,实现更加复杂的数据筛选需求。

总共有如下逻辑运算符:

1、np.logical_and()

84a91cd09d7ad3e90d9531229943b0f2.jpeg

用于两个条件并且的关系,数组元素筛选语境中,表示求两个集合交集的操作。也就是获取同时满足两个条件的数据。

可以使用运算符 & 进行简化,两者是等价的。

2、np.logical_or()

7caa7fb155f5f5a05198d43d838a2f27.jpeg

用于两个条件或的关系,数组元素筛选语境中,表示求两个集合并集的操作。也就是获取满足至少任意一个条件的数据。

可以使用运算符 | 进行简化,两者是等价的。

3、np.logical_not()

a4310e1c966f03df259da15fbd703080.jpeg

用于取反的逻辑运算,表示获取不满足该条件的数据元素。但是,通常来说,我们会自行进行条件的取反操作,而不是通过np.logical_not()来进行取反。

可以使用运算符 ~ 进行简化,两者是等价的。

4、np.logical_xor()

13fafb0f8ad07db3a4590d922cfb9b74.jpeg

逻辑异或的概念,也就是获取两个条件不同时为真、也不同时为假的数据。

可以简化为操作符 ^,两者是等价的。

下面通过代码进行举例说明:

22051620b207bd4857ac530e11851c7b.jpeg

三元运算函数where

由于逻辑运算返回的结果是布尔数组,有时不是太方便。所以,NumPy还提供了np.where()函数,可以根据条件返回元素的索引或根据条件生成新的数组。

1f8a97127e2b7bf646453bfbbdd813ef.jpeg

通过代码演示下np.where()函数的使用:

8a0ebc03bcaeba04fbc7f4cb7efc4e76.jpeg

通用判断函数any和all

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

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

b312a00bdb04f62b4c845a99c6b13341.jpeg

总结

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

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

07d0970bec43c11178cfd3c7335291a8.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫理的日知录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值