Другой вариант - numpy.random.choice
, с вводом 0 с и 1 с, где пропорция 1 с равна p
.Например, для p
= 0,75 используйте np.random.choice([0, 1, 1, 1], size=n)
:
In [303]: np.random.choice([0, 1, 1, 1], size=16)
Out[303]: array([1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0])
Это быстрее, чем np.random.binomial
:
In [304]: %timeit np.random.choice([0, 1, 1, 1], size=10000)
71.8 µs ± 368 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [305]: %timeit np.random.binomial(1, 0.75, 10000)
174 µs ± 348 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Для обработки произвольного значения для p
, вы можете использовать p
параметр np.random.choice
, но тогда код будет медленнее, чем np.random.binomial
:
In [308]: np.random.choice([0, 1], p=[0.25, 0.75], size=16)
Out[308]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0])
In [309]: %timeit np.random.choice([0, 1], p=[0.25, 0.75], size=10000)
227 µs ± 781 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)