1.函数介绍
np.where函数相当于三元表达式的向量版本,能够针对向量作三元操作,有两种使用方法。
- 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的详细内容。如果有问题,欢迎在评论区讨论。