Эффективная случайная 0,1 генерация независимых вероятностей в Python - PullRequest
0 голосов
/ 07 мая 2018

У меня большой массив вероятностей, которые не зависят друг от друга. Есть ли эффективный способ генерировать 0 или 1 на основе каждой из этих вероятностей, кроме вызова случайного случайного числа каждый раз в цикле? Мне нужен только результат одного испытания каждый раз, но для каждой вероятности.

# current method using np.random.binomial()
n = 1
p = np.random.random(1000) #generating 1000 probabilities

results = np.zeros(1000)
for ix, i in enumerate(p):
    results[ix] = np.random.binomial(n,i,1)

Существует ли более быстрый способ или функция, которая может принимать независимый набор вероятностей (поэтому не случайный выбор, поскольку вероятности не добавятся к 1).

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Параметр p для np.random.binomial может быть подобным списку, и в таком случае он представляет значение p для каждой выборки. Кроме того, при использовании подобного списку вам даже не нужно указывать количество ожидаемых сэмплов в целом: вы просто получаете один для каждого значения в p.

results = np.random.binomial(n, p)

И несколько примеров, чтобы доказать это:

In [1]: np.random.binomial(1, 0.5)
Out[1]: 1

In [2]: np.random.binomial(1, [0.5, 0.5, 0.9])
Out[2]: array([0, 0, 1])
0 голосов
/ 08 мая 2018

Вы можете попробовать это:

np.where(p > np.random.rand(1000), 1, 0) 
...