2016-04-04 77 views
2

假設我想從一個bernoulli分佈列表中抽取一次,例如,概率爲[0.1, 0.2, 0.3]。我可以用for循環做到這一點,但有一個更好的numpy方式(使用scipy也很好)?numpy一次繪製幾個bernoulli分佈

ps = [0.1, 0.2, 0.3] 
[np.random.choice(2, p=[1 - p, p]) for p in ps] 

回答

3

您可以從二項式中得出n=1,這相當於伯努利。由於二項式接受一個數組作爲概率參數,你可以使用:

np.random.binomial(1, p=ps) 

,如果它的工作給予非常小/大概率的一些元素可以測試並調用該函數幾次。

例如,讓ps = [0.23, 0.48, 0.64, 0.98]

In [90]: np.sum([np.random.binomial(1,p=ps) for i in range(100000)], axis=0) 
Out[90]: array([23000, 48115, 64128, 97957])