numpy一次绘制一些bernoulli分布

sim*_*ack 3 python random numpy

假设我想立即从bernoulli分布列表中得出,例如概率[0.1, 0.2, 0.3]。我可以使用for循环来做到这一点,但是有没有更好的numpy方法(使用scipy也可以)?

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

ayh*_*han 5

您可以n=1从二项式中得出,这等效于伯努利。由于二项式接受数组作为概率参数,因此可以使用:

np.random.binomial(1, p=ps)
Run Code Online (Sandbox Code Playgroud)

您可以通过为某些元素提供很小/很大的概率并多次调用该函数来测试其是否正常工作。

例如,让 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])
Run Code Online (Sandbox Code Playgroud)