Вы можете использовать cumsum
и argmin
, перемешать массив, чтобы сделать выбор случайным:
arr = np.array([0.87868619, 0.08184167, 0.01502171, 0.96840561, 0.31431041,
0.531577 , 0.66069971, 0.1204876 , 0.9684556 , 0.81405872,
0.48118081, 0.91681978, 0.15017044, 0.50540813, 0.11617046,
0.01897202, 0.1894475 , 0.94660911, 0.46030856, 0.04641654])
np.random.shuffle(arr)
Для порога 5
, например:
>>> (np.cumsum(arr)<=5).argmin()
11
Это дает вам индекс, где вы должны остановить суммирование. Это будет быстрее, чем цикл while, поскольку операции векторизованы.
In [38]: np.sum(arr[:11])
Out[38]: 4.15852117
In [39]: np.sum(arr[:12])
Out[39]: 5.126976770000001