NumPy: الأعداد العشوائية

آخر تحديث: 2026-10-11

1. ما ستتعلمه




2. قصة

تدير أليس محاكاة مونت كارلو لنموذج مالي. تحصل على نتائج مختلفة في كل مرة — من المستحيل التصحيح. يُظهر لها بوب: "استخدم default_rng(42) — نفس البذرة تُنتج دائماً نفس التسلسل. صَحّح بالبذرة، وانشر بدونها." تصلح أليس بذرتها، وتجد الخطأ في 5 دقائق.




3. واجهة Generator الحديثة

(1) إنشاء Generator

PYTHON
import numpy as np

# الطريقة الحديثة (موصى بها)
rng = np.random.default_rng(42)  # بذرة = 42 لإعادة الإنتاجية

# الطريقة القديمة (قديمة)
np.random.seed(42)

(2) التوزيعات الشائعة

PYTHON
rng = np.random.default_rng(42)

print(rng.random(3))        # 3 أعداد منتظمة [0, 1)
print(rng.normal(0, 1, 3))  # 3 أعداد طبيعية معيارية
print(rng.integers(0, 10, 5))  # 5 أعداد صحيحة [0, 10)
print(rng.uniform(0, 10, 3))   # 3 أعداد منتظمة [0, 10)
TEXT
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

(3) أخذ العينات العشوائية

PYTHON
rng = np.random.default_rng(42)
data = np.arange(10)

# مع الاستبدال
sample = rng.choice(data, size=5, replace=True)

# بدون استبدال
sample2 = rng.choice(data, size=5, replace=False)

# الخلط
rng.shuffle(data)  # خلط في المكان
TEXT
> **المخرجات:** قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية.

▶ مثال: توليد التوزيعات العشوائية (الصعوبة ⭐)

PYTHON
import numpy as np

rng = np.random.default_rng(42)

uniform = rng.random(5)
normal = rng.normal(0, 1, 5)
integers = rng.integers(1, 100, 5)

print("Uniform [0,1):", uniform)
print("Normal N(0,1):", normal)
print("Integers 1-99:", integers)

المخرجات:

TEXT
Uniform [0,1): [0.77395605 0.43887844 0.85859792 0.69736803 0.09417735]
Normal N(0,1): [-0.45938412 -0.19865146  0.1113586  -1.00408446  2.02558468]
Integers 1-99: [79 64 66 81 96]

▶ مثال: أخذ العينات العشوائية مع وبدون استبدال (الصعوبة ⭐⭐)

PYTHON
import numpy as np

rng = np.random.default_rng(42)
data = np.arange(20)

# مع الاستبدال — يمكن أن يظهر نفس العنصر عدة مرات
with_repl = rng.choice(data, size=10, replace=True)
print("With replacement:", with_repl)

# بدون استبدال — جميع العناصر فريدة
without_repl = rng.choice(data, size=10, replace=False)
print("Without replacement:", without_repl)

# خلط في المكان
rng.shuffle(data)
print("Shuffled data:", data)

المخرجات:

TEXT
With replacement: [ 6 19  9 12  6 15  0  7  3 14]
Without replacement: [13 10  8 11  5  1  9 16 18  4]
Shuffled data: [ 8  7 13 10 18  3 15  5 14 16  0  9  2  1 11 17 12 19  6  4]

▶ مثال: التسلسلات القابلة لإعادة الإنتاج بالبذور (الصعوبة ⭐)

PYTHON
import numpy as np

# نفس البذرة = نفس التسلسل
rng1 = np.random.default_rng(123)
rng2 = np.random.default_rng(123)

print("rng1:", rng1.random(4))
print("rng2:", rng2.random(4))

# بذرة مختلفة = تسلسل مختلف
rng3 = np.random.default_rng(456)
print("rng3:", rng3.random(4))

المخرجات:

TEXT
rng1: [0.18701985 0.68208779 0.60135938 0.51034031]
rng2: [0.18701985 0.68208779 0.60135938 0.51034031]
rng3: [0.59831648 0.72572267 0.04819845 0.35980509]

س لماذا استخدام default_rng بدلاً من np.random.seed؟
ج default_rng ينشئ كائن Generator مستقلاً — يمكنك الحصول على تيارات مستقلة متعددة. np.random.seed يضع بذرة عامة تؤثر على كل الكود، وهو هش ويمكن أن يسبب تداخلاً بين الوحدات.
س كيف أحصل على نتائج قابلة لإعادة الإنتاج؟
ج مرر بذرة ثابتة: rng = np.random.default_rng(42). نفس البذرة تُنتج دائماً نفس التسلسل. استخدم بذور مختلفة لتشغيلات مختلفة.
س ما الفرق بين random و uniform؟
ج rng.random(size) يُرجع قيماً في [0, 1). rng.uniform(low, high, size) يُرجع قيماً في [low, high). random هي حالة خاصة من uniform(0, 1).


❓ أسئلة شائعة

س ما هو أهم شيء يجب تذكره؟
ج عمليات NumPy مُتجهة — تجنب حلقات Python للحصول على أداء أفضل.
س أين يمكنني معرفة المزيد؟
ج تحقق من وثائق NumPy الرسمية على numpy.org للمراجع التفصيلية والمواضيع المتقدمة.
س هل هذا يعمل مع NumPy 2.x؟
ج نعم — جميع الأمثلة متوافقة مع NumPy 2.x. بعض واجهات API القديمة (مثل np.random.seed) لا تزال مدعومة لكن البدائل الحديثة موصى بها.

📖 ملخص



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): استخدم default_rng(42) لتوليد 10 أعداد عشرية عشوائية، و10 أعداد صحيحة عشوائية (0-100)، و10 أعداد من توزيع طبيعي. اطبعها.

  2. متوسط (الصعوبة ⭐⭐): ولّد 1000 رقم عشوائي من توزيع طبيعي. احسب متوسطها وانحرافها المعياري. تحقق من أنهما تقريباً 0 و 1.

  3. متقدم (الصعوبة ⭐⭐⭐): استخدم rng.choice مع وبدون استبدال لأخذ عينة من 10 عناصر من مجموعة بيانات من 100. اشرح الفرق ومتى تستخدم كل منهما.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%