카테고리 보관물: Python

Python

파이썬에서 임의의 부울을 얻습니까? 임의의 부울을 얻는 가장

파이썬에서 임의의 부울을 얻는 가장 좋은 방법 (빠르고 우아함)을 찾고 있습니다 (동전 던지기).

현재 또는를 사용 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