根据 Python 中的伯努利分布生成 bool 值的随机数分布
Random number distribution that generates bool values according to a Bernoulli distribution in Python
在 C++ 中,可以通过以下方式实现:
std::default_random_engine generator;
std::bernoulli_distribution distribution(0.5);
int count=0; // count number of trues
for (int i=0; i<100000; ++i) if (distribution(generator)) ++count;
我正在寻找 Python 等价物。
from random import randint
num_trues = 0
for _ in range(1000):
num_trues += randint(0, 1)
print(num_trues)
randint 生成上限和下限之间的整数,包括上限和下限。
这可能不是 python 中最惯用的方法,也可能不是最快的方法。但它有效。您可以对其他概率分布使用类似的方法。
如果您正在寻找可以调整 p
和样本大小的解决方案,您可以使用 random.choices
。可以很容易地修改此解决方案,以在 p != 0.5
:
时模拟伯努利分布的采样
import random
p = 0.5
n = 100000
count = 0
print(sum(random.choices([True, False], [p, 1 - p], k=n)))
我还要补充一点,有一些库可以从概率分布中抽样(概率编程库),例如 Pyro。这对于这项任务来说有点过分了,但如果您将来需要更强大的东西,它可能会有用。
在 C++ 中,可以通过以下方式实现:
std::default_random_engine generator;
std::bernoulli_distribution distribution(0.5);
int count=0; // count number of trues
for (int i=0; i<100000; ++i) if (distribution(generator)) ++count;
我正在寻找 Python 等价物。
from random import randint
num_trues = 0
for _ in range(1000):
num_trues += randint(0, 1)
print(num_trues)
randint 生成上限和下限之间的整数,包括上限和下限。
这可能不是 python 中最惯用的方法,也可能不是最快的方法。但它有效。您可以对其他概率分布使用类似的方法。
如果您正在寻找可以调整 p
和样本大小的解决方案,您可以使用 random.choices
。可以很容易地修改此解决方案,以在 p != 0.5
:
import random
p = 0.5
n = 100000
count = 0
print(sum(random.choices([True, False], [p, 1 - p], k=n)))
我还要补充一点,有一些库可以从概率分布中抽样(概率编程库),例如 Pyro。这对于这项任务来说有点过分了,但如果您将来需要更强大的东西,它可能会有用。