بايثون NumPy في الممارسة: الكود والأوامر التي تهم حقاً
بايثون NumPy: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 35 درسًا.
لا توجد نظرية لا نهاية لها هنا: نفتح الطرفية ونمارس. إليك أساسيات Python NumPy، مستخرجة مباشرة من دورة كاملة تضم 35 درسًا — مع كود حقيقي يمكنك نسخه ولصقه الآن.
- مقدمة وتثبيت
- إنشاء وفحص المصفوفات
- الفهرسة والتقطيع والفهرسة المتقدمة
- العمليات المتجهية
- البث
إنشاء المصفوفات
الأهداف التعليمية
لماذا لا نستخدم دائمًا np.array()؟
يمكننا دائمًا كتابة np.array([0,0,0,0,0,0,0,0,0,0]). لكن تخيل الآن أنك تحتاج مصفوفة من 1 000 000 صفر: من المستحيل كتابتها يدويًا.
لحسن الحظ، يوفر NumPy مصانع متخصصة لهذه الحالات المتكررة. وهي أسرع وأوضح وأأمن من حلقة Python.
np.zeros: مصفوفة من الأصفار
الأداة رقم 1 لـتهيئة مصفوفة. نمرر كوسيط الشكل shape المطلوب:
import numpy as np # متجه من 5 أصفار a = np.zeros(5) print(a) # [0. 0. 0. 0. 0.] # مصفوفة 3 × 4 من الأصفار b = np.zeros((3, 4)) print(b) # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]] # مكعب 2 × 3 × 4 (تنسور ثلاثي الأبعاد!) c = np.zeros((2, 3, 4)) print(c.shape) # (2, 3, 4)
np.ones: مصفوفة من الآحاد
مطابق لـzeros، لكنه مملوء بـ1. مفيد جدًا كقناع، أو كنقطة انطلاق لمصفوفات الأوزان.
import numpy as np # متجه أوزان مهيأ بـ1 poids = np.ones(10) print(poids) # [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] # مصفوفة مربعة 3 × 3 من الآحاد M = np.ones((3, 3), dtype=int) print(M) # [[1 1 1] # [1 1 1] # [1 1 1]]
لاحظ المعامل dtype=int: افتراضيًا، تنتج zeros وones قيم float64. إذا أردت أعدادًا صحيحة، اطلبها صراحة.
np.full: الملء بأي قيمة
عندما تريد الملء بقيمة غير 0 أو 1، استخدم np.full(shape, valeur):
import numpy as np # مصفوفة 2×3 مملوءة بـ7 sept = np.full((2, 3), 7) print(sept) # [[7 7 7] # [7 7 7]] # مصفوفة من NaN (قيمة مفقودة) nan_arr = np.full(5, np.nan) print(nan_arr) # [nan nan nan nan nan]
حالة عملية شائعة: تهيئة مصفوفة نتائج بـNaN، ثم ملؤها خلية بخلية أثناء الحساب.
np.arange: نسخة «range» من NumPy
np.arange(start, stop, step) هو المكافئ NumPy لدالة range في Python، لكنه يعيد ndarray:
import numpy as np # 0, 1, 2, ..., 9 (stop مستبعد) a = np.arange(10) print(a) # [0 1 2 3 4 5 6 7 8 9] # من 5 إلى 20 (مستبعد)، بخطوة 2 b = np.arange(5, 20, 2) print(b) # [ 5 7 9 11 13 15 17 19] # بخطوة عائمة: ممكن لكن يُفضل تجنبه c = np.arange(0, 1, 0.1) print(c) # [0. 0.1 0.2 ... 0.9] (لكن الحذر، انظر التحذير)
np.linspace: N نقاط متباعدة بانتظام
np.linspace(start, stop, num) يعيد num نقاط متباعدة بانتظام بين start وstop، بما في ذلك النقطتين الطرفيتين:
import numpy as np # 11 نقطة من 0 إلى 1 شاملة a = np.linspace(0, 1, 11) print(a) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ] # 5 نقاط بين -pi و +pi (مثالي لرسم sin/cos) x = np.linspace(-np.pi, np.pi, 5) print(x) # [-3.14 -1.57 0. 1.57 3.14] # 1000 نقطة لرسم سلس t = np.linspace(0, 10, 1000)
linspace لا غنى عنه لرسم المنحنيات الرياضية بـMatplotlib. إنه الأداة رقم 1 لإنشاء محاور مستمرة.
الفهرسة الأساسية
الأهداف التعليمية
الفهرسة 1D: كقائمة Python
للمصفوفة 1D، تكون الفهرسة مطابقة لقائمة Python. العنصر الأول له الفهرس 0.
import numpy as np notes = np.array([12, 15, 17, 9, 18, 14]) print(notes[0]) # 12 (الدرجة الأولى) print(notes[2]) # 17 (الدرجة الثالثة) print(notes[5]) # 14 (الدرجة الأخيرة)
النوع المعاد هو قيمة عددية NumPy، وليس مصفوفة. يمكنك استخدامه كرقم Python عادي.
الفهارس السالبة: من النهاية
كما في Python، يشير -1 إلى العنصر الأخير، -2 إلى ما قبل الأخير، إلخ.
import numpy as np notes = np.array([12, 15, 17, 9, 18, 14]) print(notes[-1]) # 14 (الأخيرة) print(notes[-2]) # 18 (قبل الأخيرة) print(notes[-6]) # 12 (الأولى، من النهاية)
الفهرسة 2D: صف وعمود
للمصفوفة، نحتاج فهرسين: arr[i, j]. هذه هي اصطلاح NumPy، وهي أوضح بكثير من arr[i][j] في Python.
import numpy as np bulletin = np.array([ [14, 15, 12], # طالب 0 [18, 11, 17], # طالب 1 [9, 10, 8], # طالب 2 [16, 19, 14], # طالب 3 ]) # درجة الطالب 1 في المادة 2 (الإنجليزية) print(bulletin[1, 2]) # 17 # الطالب 3 في الرياضيات (العمود 0) print(bulletin[3, 0]) # 16
استخراج صف كامل
بفهرس واحد، نحصل على الصف كاملًا:
import numpy as np bulletin = np.array([ [14, 15, 12], [18, 11, 17], [9, 10, 8], [16, 19, 14], ]) eleve1 = bulletin[1] print(eleve1) # [18 11 17] print(eleve1.shape) # (3,) # مكافئ صريح باستخدام slice: print(bulletin[1, :]) # [18 11 17]
كلتا الصيغتين bulletin[1] وbulletin[1, :] متكافئتان. الشكل مع : أكثر وضوحًا: «الصف 1، جميع الأعمدة».
استخراج عمود كامل
للعمود، يجب استخدام صيغة البعدين إلزاميًا:
import numpy as np bulletin = np.array([ [14, 15, 12], [18, 11, 17], [9, 10, 8], [16, 19, 14], ]) # جميع درجات الرياضيات (العمود 0) math = bulletin[:, 0] print(math) # [14 18 9 16] # المتوسط حسب المادة print("Moyenne math :", bulletin[:, 0].mean()) print("Moyenne franc :", bulletin[:, 1].mean()) print("Moyenne anglais :", bulletin[:, 2].mean())
تعديل قيمة بالإسناد
تعمل الفهرسة أيضًا في الكتابة. يمكنك تعديل عنصر، صف كامل أو عمود:
import numpy as np bulletin = np.array([ [14, 15, 12], [18, 11, 17], [9, 10, 8], ]) # تعديل خلية واحدة فقط bulletin[0, 1] = 16 print(bulletin[0]) # [14 16 12] # استبدال الصف 2 كاملًا bulletin[2] = [11, 12, 13] print(bulletin) # [[14 16 12] # [18 11 17] # [11 12 13]] # وضع عمود كامل إلى صفر bulletin[:, 2] = 0 print(bulletin) # [[14 16 0] # [18 11 0] # [11 12 0]]
تثبيت NumPy والبيئة
الأهداف التعليمية
التحقق من Python على جهازك
يحتاج NumPy إلى Python 3.9 أو أحدث. للتحقق من إصدارك، افتح طرفية واكتب:
# Windows (PowerShell أو cmd) python --version # macOS / Linux python3 --version # الخرج المتوقع (مثال): # Python 3.12.4
إذا لم يكن Python مثبتًا، حمّله من الموقع الرسمي python.org/downloads. على Windows، حدد خيار «Add Python to PATH» أثناء التثبيت.
لماذا بيئة افتراضية؟
البيئة الافتراضية مجلد معزول يحتوي نسخته الخاصة من Python ومكتباته. تتيح مشروعًا بـNumPy 1.26 وآخر بـNumPy 2.0 دون تعارض.
بدون بيئة افتراضية
مع بيئة افتراضية
الطريقة 1: pip + venv (Python القياسي)
هذه الطريقة الرسمية، خفيفة ومدمجة في Python. أنشئ مجلد مشروع، ثم افتح طرفية بداخله:
# 1. إنشاء بيئة افتراضية باسم "venv" python -m venv venv # 2. تفعيل البيئة # Windows PowerShell: venv\Scripts\Activate.ps1 # macOS / Linux: source venv/bin/activate # 3. تثبيت NumPy pip install numpy # 4. (اختياري) تثبيت Jupyter وmatplotlib أيضًا pip install jupyter matplotlib pillow
بمجرد التفعيل، يظهر موجهك (venv) في البداية. هذه إشارة أنك تعمل داخل فقاعتك المعزولة.
الطريقة 2: Anaconda / Miniconda
Anaconda توزيعة علمية لـPython توفر مثبتة مسبقًا مكتبات علم البيانات الرئيسية: NumPy، Pandas، scikit-learn، Jupyter، إلخ. مريحة جدًا للمبتدئين.
# 1. تحميل Anaconda من anaconda.com/download # 2. تشغيل المثبت الرسومي # 3. بعد التثبيت، افتح Anaconda Prompt # التحقق من إصدار NumPy المرفق conda list numpy # إنشاء بيئة مخصصة للدورة conda create -n cours-numpy python=3.12 numpy jupyter matplotlib pillow # تفعيلها conda activate cours-numpy
إذا أردت الحد الأدنى فقط، اختر Miniconda وهي نسخة خفيفة (~50 ميجابايت) بدلًا من Anaconda (~3 جيجابايت).
pip مقابل conda: أي تختار؟
| المعيار | pip + venv | conda |
|---|---|---|
| الجمهور المستهدف | مطورو Python | علماء البيانات، الطلاب |
| الحجم الأولي | خفيف جدًا | أثقل (خاصة Anaconda) |
| المكتبات المثبتة مسبقًا | لا شيء | كامل حزمة علم البيانات |
| سرعة التثبيت | سريعة جدًا لـNumPy | أبطأ لكن تحل الاعتماديات بشكل أفضل |
| مكتبات C كاملة | أحيانًا معقد (OpenCV، إلخ) | يعمل دائمًا |
| توصية الدورة | جيد إذا كنت تعرف Python | موصى به للمبتدئين |
التحقق من عمل NumPy
بمجرد التثبيت، افتح مفسر Python (بكتابة python في الطرفية) واكتب:
import numpy as np # التحقق من الإصدار print(np.__version__) # الخرج المتوقع (مثال): 2.1.0 # إنشاء مصفوفة أولى a = np.array([1, 2, 3, 4, 5]) print(a) print("Type :", type(a)) print("Forme :", a.shape) print("Type des éléments :", a.dtype)
يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Python NumPy (11 فصلاً، 35 درسًا، تمارين محلولة ومشروع ختامي) تأخذك إلى النهاية.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude Codeالأسئلة الشائعة
كم من الوقت لتعلم Python NumPy؟
هل هناك متطلبات سابقة؟
من أين نبدأ عمليًا؟
📬 هل تريد تلقي هذا النوع من الأدلة أسبوعيًا؟ اشترك مجانًا — كود حقيقي، بدون كلام زائد.