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

آخر تحديث: 2026-08-26

1. ما ستتعلمه




2. قصة

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




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

(1) إنشاء Generator

`python import numpy as np

الطريقة الحديثة (موصى بها)

rng = np.random.default_rng(42) # بذرة = 42 لإعادة الإنتاجية


4. الطريقة القديمة (قديمة)

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) `

` ext

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

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

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


5. مع الاستبدال

sample = rng.choice(data, size=5, replace=True)


6. بدون استبدال

sample2 = rng.choice(data, size=5, replace=False)


7. الخلط

rng.shuffle(data) # خلط في المكان `

` ext

المخرجات: قم بتشغيل 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) `

المخرجات:

ext 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)


8. مع الاستبدال — يمكن أن يظهر نفس العنصر عدة مرات

with_repl = rng.choice(data, size=10, replace=True) print("With replacement:", with_repl)


9. بدون استبدال — جميع العناصر فريدة

without_repl = rng.choice(data, size=10, replace=False) print("Without replacement:", without_repl)


10. خلط في المكان

rng.shuffle(data) print("Shuffled data:", data) `

المخرجات:

ext 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


11. نفس البذرة = نفس التسلسل

rng1 = np.random.default_rng(123) rng2 = np.random.default_rng(123)

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


12. بذرة مختلفة = تسلسل مختلف

rng3 = np.random.default_rng(456) print("rng3:", rng3.random(4)) `

المخرجات:

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


❓ أسئلة شائعة

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

📖 ملخص

p.random.seed() القديم لا يزال يعمل لكنه قديم — فضّل default_rng



📝 تمارين

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

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

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

Web-Tutorial.com

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

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

100%