반응형
파이썬에서 임의의 부울을 얻습니까?
파이썬에서 임의의 부울을 얻는 가장 좋은 방법 (빠르고 우아함)을 찾고 있습니다 (동전 던지기).
현재 또는를 사용 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
반응형
'IT story' 카테고리의 다른 글
문자열에서 영숫자가 아닌 문자를 제거하십시오. (0) | 2020.05.08 |
---|---|
C #-키워드 사용 가상 + 재정의 vs. (0) | 2020.05.08 |
offsetHeight, clientHeight, scrollHeight 란 무엇입니까? (0) | 2020.05.08 |
제약 조건을 일시적으로 해제 (MS SQL) (0) | 2020.05.08 |
찾고있는 파일을 제공하는 rpm 패키지를 어떻게 찾습니까? (0) | 2020.05.08 |