回答:
Adamの答えは非常に速いですが、私はそれrandom.getrandbits(1)
がはるかに速いことがわかりました。あなたが本当に長いのではなくブール値が欲しいなら
bool(random.getrandbits(1))
それでも約2倍速いです 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
from random import getrandbits
属性のルックアップを回避することで、さらにスピードアップできます。:-)
random.choice([True, False])
も機能します。
より速い方法を見つけました:
$ 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
random() > 0.5
はさらに高速なブールに評価されます!
random() >= 0.5
そうでなければ、Falseに偏った小さなビットになります。
random() < 0.5
0.5を他の確率に変更すると予想どおりに機能するため、より理にかなっています
多数のランダムなブール値を生成したい場合は、numpyのランダムモジュールを使用できます。ドキュメントから
np.random.randint(2, size=10)
は、開いている間隔[10,2)で10個のランダムな均一整数を返します。size
キーワードが生成する値の数を指定します。
これは比較から除外されているため、派手な回答が他の回答に対してどのように実行されるかについて、私は興味を持っていました。1つのランダムなブール値を生成するには、これははるかに遅くなりますが、多くを生成したい場合は、はるかに速くなります。
$ 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
Fakerライブラリを使用できます主にテストに使用されますが、さまざまな偽のデータを提供できます。
インストール:https : //pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
この質問に対する新しい見方は、で簡単にインストールできる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)
fake.boolean()
構文は、他の人が完全に理解するために、クリーンで簡単です。
not not random.getrandbits(1))
、bool
;)より高速です。