【代码示例】使用numpy布尔索引过滤二维数组中的行

这篇博客介绍了如何利用布尔索引在numpy数组中提高效率,避免使用for循环。以一个4行6列的二维数组为例,目标是筛选出第5列元素为0的行。通过切片获取第5列,比较运算生成布尔索引,然后用布尔索引遮盖原数组,得到所需结果。代码示例中展示了这一过程,并提到了布尔索引应由list转为tuple以避免未来可能的警告。最终,这种方法能有效筛选出符合条件的数组行。
摘要由CSDN通过智能技术生成

使用布尔索引可以避免使用for循环来操作数组,效率还是蛮高的,大家有必要了解下。
一般二维数组在实际工作中使用较多,所以本文直接以二维数组为例。
注:所涉及numpy基础背景知识我们在这里不再赘述,请自行百度。

首先构建一个4行6列数组arr_1,示例如下图:
在这里插入图片描述
我们的目标是根据第5列的元素的值,遮盖元素为1的行(第2行和第4行),从而从中取得元素为0的行(第1行和第3行)。
先将第5列切片,使用逻辑运算制成布尔索引,再用布尔索引遮盖arr_1,得到我们想要的结果arr_2数组。
下面是代码示例:

bool_0=arr_1[:,4]#切片取出第5列,冒号代表取整列
bool_1=[bool_0!=1]#通过比较运算得到布尔索引(其类型为list)
arr_2=arr_1[tuple(bool_1)]#将list转化为tuple进行布尔索引

其中bool_1的值为[true,false,true,false]
另外一点需要说明的是,布尔索引应从list类型转换为tuple,否则有警告:FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)] instead of arr[seq]. In the future this will be interpreted as an array index, arr[np.array(seq)], which will result either in an error or a different result.
该警告虽然不影响最终结果,但未来可能会导致问题,所以最好还是转换一下。
最后我们得到的数组arr_2为:
在这里插入图片描述
【发表是最好的记忆】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狮弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值