np.where()使用详解

1.函数介绍

np.where函数相当于三元表达式的向量版本,能够针对向量作三元操作,有两种使用方法。

  1. np.where(condition, x, y):当满足第一个参数条件时,where返回x,不满足第一个参数的条件时返回y。
  2. np.where(condition):只有condition,没有x,y则输出满足条件的坐标(下标),以元组的形式返回。

2. np.where(condition, x, y)

(1)示例:

x,y为两个标量。

# 创建0-9的一维数组
a = np.arange(10)
b = np.where(a > 3, 0, 1)
print(a)
print(b)
# 结果
[0 1 2 3 4 5 6 7 8 9]
[1 1 1 1 0 0 0 0 0 0]

a>3,满足条件,把相应位置换为0;不满足条件,把相应位置换为1

(2)示例:

x,y为两个数组。

a = np.array([1, 3, 5, 7, 9])
b = np.array([2, 4, 6, 8, 10])
condition = np.array([True, False, False, True, True])
result = np.where(condition, a, b)
print(result)
# 结果
[1 4 6 7 9]

可以看出,布尔值为Ture时,返回a数组的值;为False时,返回b数组的值。

(3)示例

x,y为一个标量一个数组。

# 将小于0的换成2
a = np.array( [-1, 3, -5, 7, -9] )
result = np.where(a < 0, 2, a)
print(result)
# 结果
[-1  3 -5  7 -9]
[2 3 2 7 2]

(4) 示例

官网上的例子

 # 官网上的例子
a = np.where([[True, False], [True, True]], 
             [[1, 2], [3, 4]], 
             [[9, 8], [7, 6]])
print(a)
# 结果
[[1 8]
 [3 4]]

上面这个例子的条件为[[True,False], [True,True]],分别对应最后输出结果的四个值。第一个值从[1,9]中选,因为条件为True,所以是选1。第二个值从[2,8]中选,因为条件为False,所以选8,后面以此类推。

3.np.where(condition)

返回的是符合条件的坐标,这里的坐标以tuple的形式给出,通常原数组有多少维,输出的tuple中就包含几个数组,分别对应符合条件元素的各维坐标。

(1)示例

一维数组

a = np.arange(10)
b = np.where(a > 7)
print(f'a = {
      
      a}')
print(f'b = {
      
      b}')
a = [0 1 2 3 4 5 6 7 8 9]
b = (array([8, 9], dtype=int64),)

返回的是数组的下标,大于7的只有8,9

(2) 示例

二维数组。

a = np.random.randn(3, 3)
print(f'a = {
      
      a}')
b = np.where(a > 0)
print(f'b = {
      
      b}')
a = [[-0.87715562  0.75345355 -2.14373533]
 [ 0.36962462 -0.3567048  -0.38734703]
 [-0.20589702  0.00343925 -0.79235428]]
b = (array([0, 1, 2], dtype=int64), array([1, 0, 1], dtype=int64))

返回的是下标,第一个元组的x,第二个元组是y。

以上就是np.where的详细内容。如果有问题,欢迎在评论区讨论。

猜你喜欢

转载自blog.csdn.net/weixin_45153969/article/details/131880493