布尔索引
一维数组
通过 布尔数组 索引 目标数组
import numpy as np
arr=np.arange(10,15)
barr=np.array([True,False,True,False,True])
print(arr[barr])
执行结果:
[10 12 14]
在布尔数组barr中,下标是0,2,4的值是True,所以通过 布尔数组 索引 目标数组,取出 目标数组 下标为 0,2,4 的值,并 组成 新数组,即:[10 12 14]
二维数组
import numpy as np
arr=np.arange(15).reshape(5,3)
barr=np.array([True,False,True,False,True])
print(arr)
print('-'*50)
# 关键代码
print(arr[barr])
执行结果如下:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
--------------------------------------------------
[[ 0 1 2]
[ 6 7 8]
[12 13 14]]
当目标数组是 二维数组 时,布尔数组 下标为0,2,4的位置是True,因此将会取出 目标数组 中第0,2,4 行,并组成一个新的数组
逻辑运算作为索引
逻辑运算
数组中大于4
import numpy as np
np.random.seed(9)
arr=np.random.randint(0,10,(3,4))
print('arr:\n',arr)
print('arr>4:\n',arr>4)
执行结果如下:
arr:
[[5 6 8 6]
[1 6 4 8]
[1 8 5 1]]
arr>4:
[[ True True True True]
[False True False True]
[False True True False]]
返回的新数组,元素都是True或False
逻辑运算作为索引
获取数组中大于4的元素
import numpy as np
np.random.seed(9)
arr=np.random.randint(0,10,(3,4))
print('arr:\n',arr)
print('arr>4:\n',arr>4)
# 关键部分
arr2=arr[arr>4]
print('arr2:\n',arr2)
执行结果:
arr:
[[5 6 8 6 1]
[6 4 8 1 8]
[5 1 0 8 8]
[8 2 6 8 1]]
arr>4:
[[ True True True True False]
[ True False True False True]
[ True False False True True]
[ True False True True False]]
arr2:
[5 6 8 6 6 8 8 5 8 8 8 6 8]
将大于等于 6 的值修改为1,小于 6 的修改为0
import numpy as np
np.random.seed(9)
arr=np.random.randint(0,10,(3,4))
print('arr:\n',arr)
print('arr>4:\n',arr>4)
print(arr[arr>6])
# 注意下面这两行代码,是否可以调换顺序
arr[arr<6]=0
arr[arr>=6]=1
print(arr)
执行结果:
[[0 1 1 1]
[0 1 0 1]
[0 1 0 0]]
问题
上例中,下面这两行代码,是否可以 调换顺序
arr[arr<6]=0
arr[arr>=6]=1