NumPythonic measurement, 2D-, 2D- measurement. np.all(..axis=1) . , . - -
m2D = measurement[np.arange(N) + np.arange(len(measurement)-N+1)[:,None]]
np.nonzero(np.all((lower_bound < m2D) & (higher_bound > m2D),axis=1))[0][0]
-
In [1]: measurement = np.array([1,2,3,4,5,5,6,7,8,5,4,5])
...: lower_bound = 3.5
...: higher_bound = 5.5
...: N = 3
...:
In [2]: m2D = measurement[np.arange(N) + np.arange(len(measurement)-N+1)[:,None]]
In [3]: m2D # Notice that is a 2D array (shifted) version of input
Out[3]:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 5],
[5, 5, 6],
[5, 6, 7],
[6, 7, 8],
[7, 8, 5],
[8, 5, 4],
[5, 4, 5]])
In [4]: np.nonzero(np.all((lower_bound < m2D) & (higher_bound > m2D),axis=1))[0][0]
Out[4]: 3