파이썬에서 임의의 부울을 얻는 가장 좋은 방법 (빠르고 우아함)을 찾고 있습니다 (동전 던지기).
현재 또는를 사용 random.randint(0, 1)
하고 random.getrandbits(1)
있습니다.
내가 모르는 더 나은 선택이 있습니까?
답변
Adam의 답변은 매우 빠르지 만 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
답변
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
답변
나는 좋아한다
np.random.rand() > .5
답변
다수의 임의의 부울을 생성하려면 numpy의 임의 모듈을 사용할 수 있습니다. 로부터 문서
np.random.randint(2, size=10)
열린 간격 [0,2)에서 10 개의 임의의 균일 한 정수를 반환합니다. size
키워드 지정 값의 수를 생성합니다.
답변
나는 이것이 비교에서 제외 된 이후 다른 답변에 비해 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
답변
Faker 라이브러리를 사용할 수 있으며 주로 테스트에 사용되지만 다양한 가짜 데이터를 제공 할 수 있습니다.
설치 : https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True