概述
布尔索引很有用,指的是通过一个和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])
领取专属 10元无门槛券
私享最新 技术干货