【知识点】np.where()用法

目录


一、基本知识

np.where 函数是三元表达式 x if condition else y 的向量化版本,它有两种用法:

1.np.where(condition,x,y) 当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y

2.np.where(condition) 当where内只有一个参数时,那个参数表示条件,当条件成立时,where返回的是每个符合condition条件元素的坐标,返回的是以元组的形式

二、具体实例

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

(1)示例1:

有两个数值数组和一个布尔数组。当布尔数组为True 时,输出 xarr 的值,否则输出 yarr 的值

代码:

import numpy as np

xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
carr = np.array([True, False, True, True, False])

result = np.where(carr, xarr, yarr)
print(result)

结果:

[1.1 2.2 1.3 1.4 2.5]

(2)示例2:

np.where的第二个和第三个参数不需要是数组,也可以是标量。where在数据分析中的一个典型用法是根据一个数组来生成一个新的数组。

假设有一个随机生成的矩阵数据,并且想将其中的正值都替换为2,负值都替换为-2

代码:

import numpy as np

arr = np.random.randn(4, 4)
print(f'arr is {arr}')

brr = np.where(arr > 0, 2, -2)
print(f'brr is {brr}')

结果:

arr is [[ 0.25269699  0.65883562 -0.25147374 -1.39408775]
 [-0.53498966 -0.97424514 -1.13900344  0.53646289]
 [ 1.51928884  0.80805854 -0.82968494  0.82861136]
 [ 0.09549692  0.59623201  0.50521756  1.648034  ]]
brr is [[ 2  2 -2 -2]
 [-2 -2 -2  2]
 [ 2  2 -2  2]
 [ 2  2  2  2]]

(3)示例3:

也可以使用np.where 将标量和数组联合:

仅替换正值为2:

代码:

import numpy as np

arr = np.random.randn(4, 4)
print(f'arr is {arr}')

brr = np.where(arr > 0, 2, arr)
print(f'brr is {brr}')

结果:

arr is [[ 0.30064659 -0.5195743   0.05916467  0.58790562]
 [ 1.0921678  -0.30010407 -0.43318393  0.60455133]
 [-0.35091718  0.01738908 -0.3067928  -0.0439254 ]
 [ 0.59166385  1.04319898 -0.73044529  0.10357739]]
brr is [[ 2.         -0.5195743   2.          2.        ]
 [ 2.         -0.30010407 -0.43318393  2.        ]
 [-0.35091718  2.         -0.3067928  -0.0439254 ]
 [ 2.          2.         -0.73044529  2.        ]]

2. np.where(condition)

返回的是坐标

示例:

import numpy as np

a = np.array([2, 4, 6, 8, 10])
#一维矩阵
result_1 = np.where(a > 5)
print(result_1)

b = np.random.randn(4, 4)
#二维矩阵
print(b)
result_2 = np.where(b > 0)
print(result_2)

结果:

Output from spyder call 'get_namespace_view':
(array([2, 3, 4], dtype=int64),)
[[-0.83362412 -2.23605027  0.15374728  0.70877121]
 [-0.30212209  0.56606258  0.95593288  1.03250978]
 [-0.85764257  1.48541971  0.73199465  1.66331547]
 [-0.22020036  0.46416537 -0.75622715  0.32649036]]
(array([0, 0, 1, 1, 1, 2, 2, 2, 3, 3], dtype=int64), array([2, 3, 1, 2, 3, 1, 2, 3, 1, 3], dtype=int64))

总结

传递给np.where 的参数既可以是同等大小的数组,也可以是标量。当不传递参数,只传递条件时,输出的是满足条件的坐标。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月5日 下午6:51
下一篇 2023年3月5日 下午6:53

相关推荐