我正在寻找最好的方法(快速和优雅)在python中获得一个随机布尔值(抛硬币)。
目前我使用的是随机。Randint(0,1)或random.getrandbits(1)。
还有我不知道的更好的选择吗?
我正在寻找最好的方法(快速和优雅)在python中获得一个随机布尔值(抛硬币)。
目前我使用的是随机。Randint(0,1)或random.getrandbits(1)。
还有我不知道的更好的选择吗?
当前回答
如果你想生成一些随机布尔值,你可以使用numpy的random模块。来自文档
np.random.randint(2, size=10)
将在开放区间[0,2)中返回10个随机统一整数。关键字size指定要生成的值的数量。
其他回答
import random
random.choice([True, False])
也会起作用。
Adam的回答相当快,但我发现random.getrandbits(1)要快得多。如果你真的想要一个布尔型而不是long型,那么
bool(random.getrandbits(1))
仍然是随机速度的两倍。选择([真,假)
两个解决方案都需要导入random
如果速度不优先,那就随机选择。选择肯定读起来更好。
注意,由于属性查找,random.choice()比choice()慢(在from random import choice之后)。
$ python3 --version
Python 3.9.7
$ python3 -m timeit -s "from random import choice" "choice([True, False])"
1000000 loops, best of 5: 376 nsec per loop
$ python3 -m timeit -s "from random import choice" "choice((True, False))"
1000000 loops, best of 5: 352 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "getrandbits(1)"
10000000 loops, best of 5: 33.7 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "bool(getrandbits(1))"
5000000 loops, best of 5: 89.5 nsec per loop
$ python3 -m timeit -s "from random import getrandbits" "not getrandbits(1)"
5000000 loops, best of 5: 46.3 nsec per loop
$ python3 -m timeit -s "from random import random" "random() < 0.5"
5000000 loops, best of 5: 46.4 nsec per loop
如果你想生成一些随机布尔值,你可以使用numpy的random模块。来自文档
np.random.randint(2, size=10)
将在开放区间[0,2)中返回10个随机统一整数。关键字size指定要生成的值的数量。
你可以试试这个,它会随机生成true和false的数组:
A =[bool(i) for i in np.array(np.random.randint(0,2,10))]
出来:[真,真,真,真,真,假,真,假,真,假]
我喜欢
np.random.rand() > .5