numpy布尔索引和比较运算

布尔索引

一维数组

通过 布尔数组 索引 目标数组

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

原文出处:/show_1EF40Wtvbf3e.html