NumPy基础之布尔索引

1 NumPy基础之布尔索引

NumPy数组的布尔索引是指用一个由布尔值组成的数组来作为索引,此布尔数组的长度必须跟被索引的轴的长度一致。布尔值为True对应的元素被保留,为False对应的元素被舍弃。

1.1 布尔数组

布尔数组可以是布尔值组成布尔列表,也可以是数组的矢量运算生成的布尔数组。

>>> import numpy as np
>>> ar1=np.arange(6)
>>> ar1
array([0, 1, 2, 3, 4, 5])
# 创建一个布尔值组成的列表
>>> ar2=[True,False,True,False,True,False]
# 布尔值列表作为索引
>>> ar1[ar2]
array([0, 2, 4])
# 数组矢量运算使得每个元素都参与运算,而不需要循环
>>> ar3=ar1%2==0 # 判断数组每个元素是否为偶数
>>> ar3
array([ True, False,  True, False,  True, False])
# 布尔索引:用相同长度的布尔数组进行索引
# 获取索引为True的对应元素
>>> ar1[ar3]
array([0, 2, 4])
# 等价写法: arr[arr的布尔运算]
>>> ar1[ar1%2==0]
array([0, 2, 4])
# 创建一个二维数组
>>> ar2d=np.array([[1,2,3,4,5],[6,7,8,9,10]])
>>> ar2d
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10]])
>>> ar2d%2==1
array([[ True, False,  True, False,  True],
       [False,  True, False,  True, False]])
>>> ar2d[ar2d%2==1]
array([1, 3, 5, 7, 9])
>>> ar2d[0]%2==1
array([ True, False,  True, False,  True])
>>> ar2d[:,ar2d[0]%2==1]
array([[ 1,  3,  5],
       [ 6,  8, 10]])

1.2 布尔索引操作

布尔索引支持关系运算、逻辑运算等,并且可以对布尔索引获取的数组元素进行修改。

>>> import numpy as np
>>> ar1=np.arange(6)
>>> ar1
array([0, 1, 2, 3, 4, 5])
# 关系运算 不等于
>>> ar1[ar1!=0]
array([1, 2, 3, 4, 5])
# 关系运算 大于
>>> con=ar1>3
>>> ar1[con]
array([4, 5])
# ~ 逻辑运算 非
>>> ar1[~con]
array([0, 1, 2, 3])
# | 逻辑运算 或,不能用 or
>>> conor=(ar1==2)|(ar1==5)
>>> conor
array([False, False,  True, False, False,  True])
>>> ar1[conor]
array([2, 5])
>>> ar1[(ar1==2)|(ar1==5)]
array([2, 5])
# & 逻辑运算 与,不能用 or
>>> conand=(ar1>2)&(ar1%2==1)
>>> conand
array([False, False, False,  True, False,  True])
>>> ar1[conand]
array([3, 5])
# 布尔索引的赋值运算
>>> ar1[ar1%2==0]=99
>>> ar1
array([99,  1, 99,  3, 99,  5])

你可能感兴趣的:(python,numpy,python)