Numpy с помощью вещания
import numpy as np
check = np.array([[0.4], [0.6]])
ranges = np.array([[0,0.33], [0.33,0.66], [0.66,1.0]])
((check >= ranges[:, 0]) & (check <= ranges[:, 1])).all(0).any()
True
Подробнее
check >= ranges[:, 0]
# 0.00 0.33 0.66 <
[[ True True False] # 0.4
[ True True False]] # 0.6
check <= ranges[:, 1]
# 0.33 0.66 1.00 >
[[False True True] # 0.4
[False True True]] # 0.6
a = (check >= ranges[:, 0]) & (check <= ranges[:, 1])
a
# 0.00 0.33 0.66 <
# 0.33 0.66 1.00 >
[[False True False] # 0.4
[False True False]] # 0.6
Чтобы оба значения check
находились в одной паре диапазонов, все столбцы должны быть True
a.all(0)
[False True False]
До тех пор, пока любой из них равен True
a.all(0).any()
True
Кукольный редукс
Однако мы могли бы преобразовать check
и ranges
для выполнения одной операции сравнения.
b = [1, -1]
(check.T * b >= ranges * b).all(1).any()
True