首页 > 解决方案 > 快速随机生成 0 或 1

问题描述

使用 python,我使用 random.randint(0,1) 随机生成 0 或 1。虽然它很慢,因为我需要做大约十亿次。有更快的方法吗?

total=0
n=1000000000
for x in range(n):
    money=2
    while True:
        x=random.randint(0,1)
        if x==1:
            break
        if x==0:
            money*=2
            continue
    total+=money
print(total/n)

标签: python

解决方案


正如已经评论过的那样,无论如何这在纯 Python 中都会有些慢。

但是平原random.random()random.randint()建立在上面,尽管复杂性令人惊讶)已经返回了一个介于 0.0 和 1.0 之间(或者更准确地说,在 range )的浮点值[0.0, 1.0),所以如果你想要一个具有合理稳定分布的随机二进制值你可以做类似的事情

from random import random # Avoiding the module attribute access on each loop will save some time
...
if random() < 0.5:
    # do one thing
else:
    # do the other

我认为即使对于 1e9 循环,这也是可以接受的。否则你可以试试 Cython。


推荐阅读