Если вы используете Numpy
import numpy as np
...
good = np.abs(pred-target) <= (range/2)
, это будет вектор логических значений (False
и True
), сообщающий вам, достаточно ли предсказан прогноз.
Логические значения в Python может использоваться как целое число (со значениями соответственно равными 0
и 1
), и это означает, что вы можете суммировать массив good
, чтобы узнать, сколько прогнозов было на цели
n_good = np.sum(good)
Небольшой эталон
In [1]: import numpy as np
...:
...: target = np.ones(2**18, dtype=int)*10
...: predicted = np.random.randint(0, 21, 2**18)
In [2]: %timeit [1 for i,j in zip(predicted, target) if i in range(j-5,j+6)]
...: %timeit sum(1 for i,j in zip(predicted, target) if i in range(j-5,j+6))
...: %timeit np.abs(predicted-target)<=5
...: %timeit np.sum(np.abs(predicted-target)<=5)
983 ms ± 6.22 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
964 ms ± 11.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
1.63 ms ± 44.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
2.18 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [3]: