检查numpy数组是否在范围内

时间:2018-08-29 04:38:16

标签: python pandas numpy

寻找一种更有效的方法来检查numpy数组中的项是否在一组最小值和最大值之间(或至少匹配一次)。我玩弄了any()np.any()all(),但这些对我来说是较新的概念。

y_minmax_bounds = [[1.1, 2.0], [3.3, 6.21], [5.75, 10.0]]
y = np.array([1.5, 2.5, 2, 6, 8, 10])
withinbounds = [((y > min) & (y < max))for min, max in y_minmax_bounds]
print(withinbounds)

返回:

[array([True, False, False, False, False, False]), 
array([False, False, False,  True, False, False]), 
array([False, False, False,  True,  True, False])]

在以下数组解决方案之后:

[True False False True True False]

我可以遍历y_minmax_bounds,但是鉴于要检查的np.array非常大,这似乎效率很低。实际的问题还将是在多个维度上强制实施(x上的x_minmax_bounds,z上的z_minmax_bounds)。

1 个答案:

答案 0 :(得分:2)

带有Numpy广播

mn, mx = np.array(y_minmax_bounds).T
x = y[:, None]

((x > mn) & (x < mx)).any(1)

array([ True, False, False,  True,  True, False])