寻找一种更有效的方法来检查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
)。
答案 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])