Saya mencari cara terbaik (cepat dan elegan) untuk mendapatkan boolean acak dengan python (flip a coin).
Untuk saat ini saya menggunakan random.randint(0, 1)
atau random.getrandbits(1)
.
Apakah ada pilihan yang lebih baik yang tidak saya sadari?
Jawaban Adam cukup cepat, tetapi ternyata random.getrandbits(1)
lebih cepat. Jika Anda benar-benar menginginkan boolean, bukan lama
bool(random.getrandbits(1))
masih sekitar dua kali lebih cepat random.choice([True, False])
Kedua solusi perlu import random
Jika kecepatan maksimal bukan prioritas maka random.choice
pasti membaca lebih baik
$ 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
Menambahkan ini setelah melihat jawaban @ Pavel
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
not not random.getrandbits(1))
lebih cepat daribool
;)from random import getrandbits
untuk menghindari pencarian atribut. :-)juga akan bekerja.
sumber
Menemukan metode yang lebih cepat:
sumber
random() > 0.5
sudah dievaluasi menjadi bool yang bahkan lebih cepat!random() >= 0.5
, jika tidak, Anda akan sedikit bias terhadap False.random() < 0.5
lebih masuk akal karena mengubah 0,5 ke beberapa probabilitas lain berfungsi seperti yang diharapkansaya suka
sumber
Jika Anda ingin menghasilkan sejumlah boolean acak, Anda bisa menggunakan modul acak numpy. Dari dokumentasi
akan mengembalikan 10 bilangan bulat seragam acak dalam interval terbuka [0,2). Kata
size
kunci menentukan jumlah nilai yang akan dihasilkan.sumber
Saya ingin tahu bagaimana kecepatan jawaban numpy dilakukan terhadap jawaban lain karena ini tidak disertakan dalam perbandingan. Untuk menghasilkan satu bool acak ini jauh lebih lambat tetapi jika Anda ingin menghasilkan banyak bool maka ini menjadi jauh lebih cepat:
sumber
Anda bisa menggunakan pustaka Faker , ini terutama digunakan untuk pengujian, tetapi mampu memberikan berbagai data palsu.
Instal: https://pypi.org/project/Faker/
sumber
Pandangan baru tentang pertanyaan ini akan melibatkan penggunaan Faker yang dapat Anda instal dengan mudah
pip
.sumber
fake.boolean()
sintaks bersih dan mudah bagi orang lain untuk grok.