首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Numpy中的布尔索引

概述

布尔索引很有用,指的是通过一个和Numpy数组元素个数相同的布尔数组,能够同Numpy数组中取出True对应的元素。为了理解透彻这个概念,我们写一些具体的案例来详细的了解一下。

准备数据

import numpy as np

arr1 = np.array(["a","a","b"])

arr2 = np.array([[1,2],[2,3],[3,2]])

布尔索引的基本用法

我们现在有个数组arr1,它的内容是:

array(['a', 'a', 'b'], dtype='

现在我想要从中找出值为“a”的元素,则可以写为:

arr1 == "a"

输出结果如下:

arr1 == "a"

arr1 == "a"

array([ True, True, False])

通过布尔索引取数据

通过上面的案例,我们已经能够拿到一个布尔类型的数组了,这个数组还是Numpy的数组类型,我们可以使用这个数组去原数组arr1中取数据,写法如下:

arr1[arr1 == "a"]

输出结果如下:

array(['a', 'a'], dtype='

这里我们已经知道了“arr1 == "a"”得到的结果是:

array([ True, True, False])

所以,我们可以将案例改写为:

arr1[[True,True,False]]

得到的结果是:

array(['a', 'a'], dtype='

由此,我们可以得出结论:Numpy的数组可以传入一个和元素长度相同的布尔值组成的数组,从而从原数组中取出布尔值为True对应的元素组成一个新的数组。而Numpy的数组可以通过条件表达式转换为布尔数组,索引往往可以简写为:

数组[数组 条件运算符 值]

比如:

arr1[arr1 == "a"]

跨数组索引

在Numpy中,只要两个数组的元素个数相同,一个数组的布尔数组是可以取出另一个数组中的元素的,写法如下:

import numpy as np

arr1 = np.array(["a","a","b"])

arr2 = np.array([[1,2],[2,3],[3,2]])

# 由于arr1的元素个数和arr2的元素个数一样,所以可以有下面的写法

arr2[arr1 == "a"]

输出结果如下:

array([[1, 2],

[2, 3]])

这里的核心还是要掌握到,Numpy的数组可以传入一个布尔数组取出True对应的元素。比如这里完全可以改写为:

import numpy as np

arr1 = np.array(["a","a","b"])

arr2 = np.array([[1,2],[2,3],[3,2]])

# 由于arr1的元素个数和arr2的元素个数一样,所以可以有下面的写法

arr2[arr1 == "a"]

arr2[[True,True,False]]

输出结果也是一样的:

array([[1, 2],

[2, 3]])

取反操作

通过符号“~”可以对条件表达式取反,比如:

import numpy as np

arr1 = np.array(["a","a","b"])

arr2 = np.array([[1,2],[2,3],[3,2]])

# 由于arr1的元素个数和arr2的元素个数一样,所以可以有下面的写法

arr2[~(arr1 == "a")]

得到的结果如下:

array([[3, 2]])

此时,我们内部的表达式也可以取反操作,比如:

import numpy as np

arr1 = np.array(["a","a","b"])

arr2 = np.array([[1,2],[2,3],[3,2]])

# 由于arr1的元素个数和arr2的元素个数一样,所以可以有下面的写法

arr2[~(arr1 != "a")]

得到的结果如下:

array([[1, 2],

[2, 3]])

逻辑条件或

如果我们想要通过多个条件从数组元素中取出值,而要这些条件满足或的关系,则可以使用或运算符“|”,示例代码如下:

import numpy as np

arr1 = np.array(["a","a","b","c","d"])

# 取出a或b

arr1[(arr1 == "a") | (arr1 == "b")]

输出结果如下:

array(['a', 'a', 'b'], dtype='

逻辑条件且

如果我们想要通过多个条件从数组元素中取出值,而要这些条件满足且的关系,则可以使用或运算符“&”,示例代码如下:

import numpy as np

arr1 = np.array([-1, -2, -3, 1, 2, 3])

# 取出大于0且小于3的数

arr1[(arr1 > 0) & (arr1 < 3)]

输出结果如下:

array([1, 2])

布尔条件赋值

布尔数组能够取值,也能赋值,比如:

import numpy as np

arr1 = np.array([-1, -2, -3, 1, 2, 3])

# 将小于0的数改为100

arr1[arr1 < 0] = 100

arr1

输出结果如下:

array([100, 100, 100, 1, 2, 3])

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230108A005WV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券