numpy.where
numpy.where(condition, [x, y])
Return elements, either from x or y, depending on condition.
满足条件(condition),输出x,不满足输出y
If only condition is given, return condition.nonzero().
Parameters: condition : array_like, bool
When True, yield x, otherwise yield y.
x, y : array_like, optional
Values from which to choose. x, y and condition need to be broadcastable to some shape.
Returns: out : ndarray or tuple of ndarrays
If both x and y are specified, the output array contains elements of x where condition is True, and elements from y elsewhere.
If only condition is given, return the tuple condition.nonzero(), the indices where condition is True.
现在来看看例子吧,主要有三种用法
- 如果条件是布尔值,那么x, y的值和他一一对应
s = np.where([[False, True],
[True, False]],
[[2, 4],
[5, 6]],
[[1, 3],
[4, 5]])
s = [[1 4]
[5 5]]
可以看的出来,x, y各是一个二维数组,布尔值如果是False, 则选择y的值;是True, 则选择x的值。
- 只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标
a = np.array([2,4,6,8,10])
s = np.where(a > 6)
print(s)
s = (array([3, 4], dtype=int64),)
是以tuple的形式给出。
- 如果条件 (condition)是一维数组,则就相当于
[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
c = np.arange(10)
s1 = np.where(c, 2, -2)
s2 = np.where(c>5, 2, -2)
print(s1)
s1 = [-2 2 2 2 2 2 2 2 2 2]
s2 = [-2 -2 -2 -2 -2 -2 2 2 2 2]
此时,条件 c 就是真值表。