আমি পাইথনে এলোমেলো বুলিয়ান পেতে একটি সেরা উপায় (দ্রুত এবং মার্জিত) সন্ধান করছি (একটি মুদ্রা ফ্লিপ করুন)।
এই মুহুর্তের জন্য আমি ব্যবহার করছি random.randint(0, 1)
বা random.getrandbits(1)
।
আমি কি অবগত না আরও ভাল পছন্দ আছে?
আমি পাইথনে এলোমেলো বুলিয়ান পেতে একটি সেরা উপায় (দ্রুত এবং মার্জিত) সন্ধান করছি (একটি মুদ্রা ফ্লিপ করুন)।
এই মুহুর্তের জন্য আমি ব্যবহার করছি random.randint(0, 1)
বা random.getrandbits(1)
।
আমি কি অবগত না আরও ভাল পছন্দ আছে?
উত্তর:
অ্যাডামের উত্তরটি বেশ দ্রুত, তবে আমি পেয়েছি যে random.getrandbits(1)
এটি বেশ দ্রুত হতে পারে। আপনি যদি সত্যিই দীর্ঘ সময়ের পরিবর্তে কোনও বুলিয়ান চান
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
@ পাভেলের উত্তর দেখার পরে এটি যুক্ত করা হয়েছে
$ python -m timeit -s "from random import random" "random() < 0.5"
10000000 loops, best of 3: 0.115 usec per loop
from random import getrandbits
অ্যাট্রিবিউট লুকআপ এড়াতে আপনি এটিকে আরও বাড়িয়ে দিতে পারেন । :-)
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
random() > 0.5
ইতিমধ্যে একটি বাল মূল্যায়ন যা আরও দ্রুত!
random() >= 0.5
অন্যথায় আপনি মিথ্যা প্রতি পক্ষপাতিত্বকারী হতে পারেন be
random() < 0.5
0.5 আরও কিছু সম্ভাব্যতা হিসাবে প্রত্যাশা হিসাবে কাজ করে পরিবর্তন হিসাবে আরও বোঝায়
আপনি যদি অনেকগুলি এলোমেলো বুলিয়ান উত্পন্ন করতে চান তবে আপনি নম্পির র্যান্ডম মডিউলটি ব্যবহার করতে পারেন। ডকুমেন্টেশন থেকে
np.random.randint(2, size=10)
উন্মুক্ত ব্যবধানে [0,2) 10 টি এলোমেলো ইউনিফর্ম পূর্ণসংখ্যার ফিরিয়ে দেবে। size
শব্দ নির্দিষ্ট করে মান রয়েছে তা গণনা তৈরি করতে।
এটি জানতে তুলতে আগ্রহী ছিলাম যেহেতু এই উত্তরগুলির তুলনাটি বাদ দেওয়া থেকে অন্যান্য উত্তরগুলির তুলনায় নিমপ উত্তরের গতি কীভাবে সম্পাদিত হয়েছিল। একটি এলোমেলোভাবে পুল তৈরি করতে এটি অনেক ধীর গতিযুক্ত তবে আপনি যদি অনেকগুলি তৈরি করতে চান তবে এটি আরও দ্রুত হয়ে যায়:
$ 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
আপনি ফেকার লাইব্রেরিটি ব্যবহার করতে পারেন , এটি মূলত পরীক্ষার জন্য ব্যবহৃত হয় তবে বিভিন্ন ধরণের জাল তথ্য সরবরাহ করতে সক্ষম।
ইনস্টল করুন: https://pypi.org/project/Faker/
>>> from faker import Faker
>>> fake = Faker()
>>> fake.pybool()
True
এই প্রশ্নের নতুন সিদ্ধান্ত গ্রহণের সাথে ফেকারের ব্যবহার জড়িত যা আপনি সহজেই ইনস্টল করতে পারেন 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)
fake.boolean()
সিনট্যাক্স পরিষ্কার এবং সহজ অন্যদের grok করার জন্য।
not not random.getrandbits(1))
চেয়ে দ্রুততরbool
;)