آموزش

آموزش ساخت اعداد تصادفی با استفاده از NumPy

ماژول random در NumPy مجموعه‌ای از توابع مبتنی بر تولید اعداد شبه‌تصادفی رو در اختیارمون قرار می‌ده. منظور از تصادفی، چیزیه که نتونیم اون رو به‌صورت منطقی پیش‌بینی کنیم.

تاریخ انتشار:
1 شهریور 1405
پایتون
4 دقیقه
کاربرهای فینکا در چه شرکت‌هایی مشغول به کار هستند؟

ماژول random در کتابخونه numpy شامل یه سری تابعه که کارشون تولید اعداد شبه‌تصادفیه. تصادفی بودن اینجا یعنی نمی‌شه اون عدد رو از روی منطق پیش‌بینی کرد.

تابع ()np.random.seed

در این مثال، می‌خوایم یه پرتاب سکه رو شبیه‌سازی کنیم. از تابع np.random() استفاده می‌کنیم که یه عدد بین ۰ و ۱ بهمون می‌ده، طوری که احتمال رخ دادن همه اعداد در این بازه با هم برابره.

اگه عددی که می‌گیری کمتر از ۰.۵ باشه (که ۵۰٪ احتمال وقوع داره)، اونو شیر در نظر می‌گیری و در غیر این صورت خط. به این نوع نتایج که فقط دو حالت True (شیر) یا False (خط) دارن، آزمایش برنولی می‌گن.

تولید اعداد شبه‌تصادفی این‌طوری کار می‌کنه که اول با یه عدد صحیح به اسم seed شروع می‌شه و بعد اعداد رو به ترتیب تولید می‌کنه. اگه از یه seed ثابت استفاده کنیم، همیشه همون دنباله از اعداد تصادفی رو می‌گیریم؛ برای همینم بهش می‌گیم اعداد «شبه» تصادفی. اگه می‌خوای کدی بنویسی که خروجی‌های ثابتی داشته باشه و نتایجش قابل بازتولید باشه، بهتره با استفاده از تابع np.random.seed() تولیدکننده اعداد تصادفی رو با یه seed تنظیم کنی.

برای پرتاب سکه‌ها، اول کتابخونه numpy رو وارد می‌کنیم، seed رو تنظیم می‌کنیم و بعد ۴ تا عدد تصادفی به دست میاریم. با کلمه کلیدی size می‌تونیم مشخص کنیم چند تا عدد تصادفی نیاز داریم.

اولین عددی که به دست میاری کمتر از ۰.۵ هست، پس شیر در نظر گرفته می‌شه، در حالی که سه تا عدد بعدی خط هستن. تو می‌تونی این رو خیلی راحت با استفاده از عملگر کوچک‌تر از (<) نشون بدی، که در خروجی یه آرایه از مقادیر بولین (True برای شیر و False برای خط) بهت می‌ده.

خروجی
array([True, False, False, False], dtype=bool)

در نهایت، می‌تونیم تعداد شیرها رو با جمع کردن مقادیر آرایه بولین heads به دست بیاریم؛ چون پایتون در محاسبات عددی، True رو معادل ۱ و False رو معادل ۰ در نظر می‌گیره.

خروجی
1

شبیه‌سازی ۴ پرتاب تصادفی سکه

در مثال زیر، می‌خوایم ببینیم اگه آزمایش پرتاب ۴ سکه رو بارها و بارها تکرار کنیم، چقدر احتمال داره که در هر آزمایش هر ۴ تا پرتاب شیر بیاد. می‌تونیم این کار رو با یه حلقه for انجام بدیم.

اول مقدار متغیر شمارنده رو صفر می‌ذاریم. بعد این آزمایش ۴ پرتابی رو ۱۰۰۰۰ بار تکرار می‌کنیم. اگه در یه آزمایش خاص هر ۴ پرتاب شیر بود، یه واحد به شمارنده اضافه می‌کنیم.

حالا احتمال این‌که هر ۴ بار شیر بیاد چقدره؟ برابر با تعداد دفعاتیه که هر ۴ سکه شیر شدن تقسیم بر کل تعداد آزمایش‌ها. نتیجه حدود ۰.۰۶ می‌شه.

مثال

در این مثال، می‌خوایم تعداد زیادی عدد تصادفی بین ۰ و ۱ تولید کنیم و بعدش هیستوگرام نتایج رو بکشیم. اگه این اعداد واقعاً تصادفی باشن، تمام ستون‌های هیستوگرام باید ارتفاع برابری (یا خیلی نزدیک به هم) داشته باشن.

برای این کار باید مراحل زیر رو طی کنیم:

  • با استفاده از np.random.seed و تنظیم seed روی ۴۲، تولیدکننده اعداد تصادفی رو مقداردهی اولیه کنیم.
  • یه آرایه خالی به اسم random_numbers با ظرفیت ۱۰۰۰۰۰ تا برای ذخیره اعداد تصادفی آماده کنیم. برای این کار از np.empty(100000) استفاده می‌کنیم.
  • یه حلقه for بنویسیم تا ۱۰۰۰۰۰ تا عدد تصادفی رو با np.random.random() تولید کنه و در آرایه random_numbers ذخیره کنه. برای این کار، حلقه رو روی range(100000) اجرا می‌کنیم.
  • هیستوگرام random_numbers رو رسم کنیم. در این حالت نیازی به برچسب‌گذاری محورها نیست؛ چون فقط داریم فرآیند تولید اعداد تصادفی رو بررسی می‌کنیم.

می‌تونی خودت این کد رو اینجا امتحان کنی.

برای یادگیری بیشتر درباره تولیدکننده‌های اعداد تصادفی و تکنیک‌های آماری، می‌تونی این ویدیو رو از دوره تفکر آماری در پایتون (بخش ۱) ببینی.

این محتوا از دوره تفکر آماری در پایتون (بخش ۱) فینکا گرفته شده.

اشتراک‌گذاری
فهرست مطالب
  • تابع ()np.random.seed
  • شبیه‌سازی ۴ پرتاب تصادفی سکه
  • مثال

دریافت اپلیکیشن فینکا

با اپلیکیشن فینکا، به بیشتر دوره‌ها و مسیرها روی موبایل دسترسی دارید، تمرین می‌کنید و یادگیری رو هم‌زمان روی موبایل و دسکتاپ ادامه می‌دید.