问题:在python中获取随机布尔值?
我正在寻找最好的方法(快速而优雅)来获取python中的随机布尔值(翻转硬币)。
目前,我正在使用random.randint(0, 1)
或random.getrandbits(1)
。
有我不知道的更好的选择吗?
回答 0
亚当的答案相当快,但是我发现答案random.getrandbits(1)
要快得多。如果您真的想要布尔值而不是long值,那么
bool(random.getrandbits(1))
仍然是两倍的速度 random.choice([True, False])
两种解决方案都需要 import random
如果最大的速度不是优先考虑的话,那么random.choice
绝对可以读得更好
$ python -m timeit -s "import random" "random.choice([True, False])"
1000000 loops, best of 3: 0.904 usec per loop
$ python -m timeit -s "import random" "random.choice((True, False))"
1000000 loops, best of 3: 0.846 usec per loop
$ python -m timeit -s "import random" "random.getrandbits(1)"
1000000 loops, best of 3: 0.286 usec per loop
$ python -m timeit -s "import random" "bool(random.getrandbits(1))"
1000000 loops, best of 3: 0.441 usec per loop
$ python -m timeit -s "import random" "not random.getrandbits(1)"
1000000 loops, best of 3: 0.308 usec per loop
$ python -m timeit -s "from random import getrandbits" "not getrandbits(1)"
1000000 loops, best of 3: 0.262 usec per loop # not takes about 20us of this
在看到@Pavel的答案后添加了此内容
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
回答 1
random.choice([True, False])
也可以。
回答 2
找到了更快的方法:
$ python -m timeit -s "from random import getrandbits" "not getrandbits(1)"
10000000 loops, best of 3: 0.222 usec per loop
$ python -m timeit -s "from random import random" "True if random() > 0.5 else False"
10000000 loops, best of 3: 0.0786 usec per loop
$ python -m timeit -s "from random import random" "random() > 0.5"
10000000 loops, best of 3: 0.0579 usec per loop
回答 3
我喜欢
np.random.rand() > .5
回答 4
如果要生成许多随机布尔值,可以使用numpy的random模块。从文档中
np.random.randint(2, size=10)
将在开放时间间隔[0,2)中返回10个随机一致整数。所述size
关键字指定的值的数目,以产生。
回答 5
我很想知道numpy答案相对于其他答案的表现如何,因为这没有进行比较。要生成一个随机布尔,速度要慢得多,但是如果要生成多个布尔值,则速度会快得多:
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.0906 usec per loop
$ python -m timeit -s "import numpy as np" "np.random.randint(2, size=1)"
100000 loops, best of 3: 4.65 usec per loop
$ python -m timeit -s "from random import random" "test = [random() < 0.5 for i in range(1000000)]"
10 loops, best of 3: 118 msec per loop
$ python -m timeit -s "import numpy as np" "test = np.random.randint(2, size=1000000)"
100 loops, best of 3: 6.31 msec per loop
回答 6
您可以使用Faker库,该库主要用于测试,但是能够提供各种假数据。
安装:https : //pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
回答 7
有关此问题的新观点将涉及使用Faker,您可以轻松地使用Faker安装它pip
。
from faker import Factory
#----------------------------------------------------------------------
def create_values(fake):
""""""
print fake.boolean(chance_of_getting_true=50) # True
print fake.random_int(min=0, max=1) # 1
if __name__ == "__main__":
fake = Factory.create()
create_values(fake)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。