# numpy.where的使用

# 函数介绍

numpy.where(condition, [x, y, ])
  • condition: 条件
  • x:数组,shapecondition或支持广播
  • y:数组,shapecondition或支持广播

根据conditionxy中取数值,如果condition条件为Truex对应位置的元素,否则取y对应位置的元素。

当数组都是一维的时候,函数的功能等同于以下语句:

[xv if c else yv for c, xv, yv in zip(condition, x, y)]

# 示例

  • [x,y]不为空
cond = [[True, False], [True, True]]
x = [[1, 2], [3, 4]]
y = [[9, 8], [7, 6]]
out = np.where(cond, x, y)
print(out)

# [[1, 8],
#  [3, 4]]

可以看到,条件为True的位置取了x的值,为False的位置取了y的值。

  • [x,y]为空
cond = [[True, True, False], [True, True, True]]
x, y = np.where(cond)
print(x,y)
# [0 0 1 1 1] [0 1 0 1 2]
print(np.stack((x, y)).T)
# array([[0, 0],
#        [0, 1],
#        [1, 0],
#        [1, 1],
#        [1, 2]])

可以看到当不传入[x,y]数组时,np.where返回的时conditionTrue位置的ij列的坐标值。可以看到上面condition对应的(0,0)/(0,1)/(1,0)5个位置都是True

(adsbygoogle = window.adsbygoogle || []).push({});

1.https://numpy.org/doc/stable/reference/generated/numpy.where.html (opens new window)