IT story

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

hot-time 2020. 5. 8. 08:21
반응형

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


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

현재 또는를 사용 random.randint(0, 1)하고 random.getrandbits(1)있습니다.

내가 모르는 더 나은 선택이 있습니까?


Adam의 답변은 매우 빠르지 만 random.getrandbits(1)상당히 빠릅니다. 정말로 long 대신 boolean을 원한다면

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사용 하여 쉽게 설치할 수 있습니다 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)

참고 URL : https://stackoverflow.com/questions/6824681/get-a-random-boolean-in-python

반응형