بايثون NumPy في الممارسة: الكود والأوامر التي تهم حقاً

بايثون NumPy: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 35 درسًا.

بايثون NumPy في الممارسة: الكود والأوامر التي تهم حقاً

لا توجد نظرية لا نهاية لها هنا: نفتح الطرفية ونمارس. إليك أساسيات Python NumPy، مستخرجة مباشرة من دورة كاملة تضم 35 درسًا — مع كود حقيقي يمكنك نسخه ولصقه الآن.

tl;dr
  • مقدمة وتثبيت
  • إنشاء وفحص المصفوفات
  • الفهرسة والتقطيع والفهرسة المتقدمة
  • العمليات المتجهية
  • البث
~$ cat ./parcours.md # Python NumPy — 10 فصول
01
مقدمة وتثبيت
→ عرض الدورة→ تثبيت NumPy والبيئة+ 1 دروس أخرى
02
إنشاء وفحص المصفوفات
→ إنشاء المصفوفات→ فحص الشكل، النوع، الأبعاد+ 1 دروس أخرى
03
الفهرسة والتقطيع والفهرسة المتقدمة
→ الفهرسة الأساسية→ التقطيع متعدد الأبعاد+ 1 دروس أخرى
04
العمليات المتجهية
→ لماذا التوجيه؟→ عمليات عنصرية+ 1 دروس أخرى
05
البث
→ قواعد البث→ البث في التطبيق+ 1 دروس أخرى
06
الجبر الخطي
→ الضرب المصفوفي→ المنقولة، المعكوس، المحدد+ 1 دروس أخرى
07
إحصائيات مع NumPy
→ المتوسط، الوسيط، الانحراف المعياري→ النسب المئوية والكميات+ 1 دروس أخرى
08
توليد الأرقام العشوائية
→ numpy.random.default_rng→ التوزيعات الإحصائية+ 1 دروس أخرى
🏁
المشروع النهائي (+ 2 فصول في الطريق)
→ Tu repars avec un projet concret et démontrable

إنشاء المصفوفات

NOTEالهدف — اكتشاف جميع مصانع المصفوفات المدمجة في NumPy. بدلًا من كتابة قوائم Python يدويًا، نتعلم كيفية توليد مصفوفات بأي شكل بقيم محددة مسبقًا: أصفار، آحاد، نطاقات رقمية، مصفوفات الوحدة…

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — ستتمكن من اختيار المصنع المناسب لكل احتياج: تهيئة مصفوفة أوزان في شبكة عصبية، إنشاء محور زمني لرسم بياني، توليد قناع مملوء بـ1، إلخ. هذه الدوال تعود يوميًا في علم البيانات.

لماذا لا نستخدم دائمًا np.array()؟

يمكننا دائمًا كتابة np.array([0,0,0,0,0,0,0,0,0,0]). لكن تخيل الآن أنك تحتاج مصفوفة من 1 000 000 صفر: من المستحيل كتابتها يدويًا.

لحسن الحظ، يوفر NumPy مصانع متخصصة لهذه الحالات المتكررة. وهي أسرع وأوضح وأأمن من حلقة Python.

np.zeros: مصفوفة من الأصفار

الأداة رقم 1 لـتهيئة مصفوفة. نمرر كوسيط الشكل shape المطلوب:

output
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)
WARNINGانتبه للقوس — للأبعاد المتعددة، يجب تمرير tuple: np.zeros((3, 4)) وليس np.zeros(3, 4). هذا الخطأ الأول للمبتدئين.

np.ones: مصفوفة من الآحاد

مطابق لـzeros، لكنه مملوء بـ1. مفيد جدًا كقناع، أو كنقطة انطلاق لمصفوفات الأوزان.

output
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):

output
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:

output
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] (لكن الحذر، انظر التحذير)
WARNINGفخ كلاسيكي — مع خطوة عائمة (0.1، 0.01…)، قد ينتج arange عددًا من العناصر مختلفًا عما نتوقع بسبب أخطاء التقريب الثنائي. فضّل np.linspace للخطوات غير الصحيحة.

np.linspace: N نقاط متباعدة بانتظام

np.linspace(start, stop, num) يعيد num نقاط متباعدة بانتظام بين start وstop، بما في ذلك النقطتين الطرفيتين:

output
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 لإنشاء محاور مستمرة.

الفهرسة الأساسية

NOTEالهدف — تعلم كيفية الوصول بدقة إلى أي عنصر في مصفوفة: قيمة عددية واحدة، صف كامل، عمود كامل، أو مصفوفة فرعية. إنها إحدى المهارات الأكثر استخدامًا يوميًا.

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — ستتمكن من استخراج عنصر واحد، صف أو عمود من مصفوفة، استخدام الفهارس السالبة للبدء من النهاية، وتعديل قيم محددة بالإسناد.

الفهرسة 1D: كقائمة Python

للمصفوفة 1D، تكون الفهرسة مطابقة لقائمة Python. العنصر الأول له الفهرس 0.

output
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 إلى ما قبل الأخير، إلخ.

output
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  (الأولى، من النهاية)
TIPنصيحةarr[-1] اختصار شائع جدًا للوصول إلى القيمة الأخيرة، دون الحاجة لحساب arr[len(arr)-1].

الفهرسة 2D: صف وعمود

للمصفوفة، نحتاج فهرسين: arr[i, j]. هذه هي اصطلاح NumPy، وهي أوضح بكثير من arr[i][j] في Python.

output
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
WARNINGarr[i, j] وليس arr[i][j] — كلاهما يعمل، لكن arr[i, j] أسرع وأكثر اصطلاحية. arr[i][j] ينشئ أولاً الصف i (مصفوفة فرعية) ثم يأخذ العنصر j؛ أي عمليتان بدلًا من واحدة.

استخراج صف كامل

بفهرس واحد، نحصل على الصف كاملًا:

output
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، جميع الأعمدة».

استخراج عمود كامل

للعمود، يجب استخدام صيغة البعدين إلزاميًا:

output
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())
WARNINGخطأ شائعbulletin[, 0] غير صالح في Python. الفاصلة تحتاج عضوًا على اليسار. استخدم bulletin[:, 0].

تعديل قيمة بالإسناد

تعمل الفهرسة أيضًا في الكتابة. يمكنك تعديل عنصر، صف كامل أو عمود:

output
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 والبيئة

NOTEالهدف — إعداد بيئة Python نظيفة، تثبيت NumPy والتحقق من عمل كل شيء. سنرى الطريقتين الرئيسيتين: pip (مدير الحزم القياسي) وconda (توزيعة Anaconda، الشائعة جدًا في علم البيانات).

الأهداف التعليمية

TIPفي نهاية هذه الوحدة — سيكون لديك Python مثبتًا، بيئة افتراضية منشأة، NumPy مثبتًا، Jupyter Notebook يعمل، وتأكيد أن إعدادك جاهز لمتابعة الدورة.

التحقق من Python على جهازك

يحتاج NumPy إلى Python 3.9 أو أحدث. للتحقق من إصدارك، افتح طرفية واكتب:

output
# Windows (PowerShell أو cmd)
python --version

# macOS / Linux
python3 --version

# الخرج المتوقع (مثال):
# Python 3.12.4

إذا لم يكن Python مثبتًا، حمّله من الموقع الرسمي python.org/downloads. على Windows، حدد خيار «Add Python to PATH» أثناء التثبيت.

WARNINGتنبيه — Python 2 مهمل — إذا أجابت أمر python بـ«Python 2.7…»، استخدم python3 أو ثبت إصدارًا حديثًا. NumPy الحديث لا يدعم Python 2 منذ 2020.

لماذا بيئة افتراضية؟

البيئة الافتراضية مجلد معزول يحتوي نسخته الخاصة من Python ومكتباته. تتيح مشروعًا بـNumPy 1.26 وآخر بـNumPy 2.0 دون تعارض.

بدون بيئة افتراضية

مع بيئة افتراضية

الطريقة 1: pip + venv (Python القياسي)

هذه الطريقة الرسمية، خفيفة ومدمجة في Python. أنشئ مجلد مشروع، ثم افتح طرفية بداخله:

output
# 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، إلخ. مريحة جدًا للمبتدئين.

output
# 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 موصى به للمبتدئين
TIPتوصيتنا — إذا كانت هذه أول تجربة لك مع علم البيانات، ثبّت Anaconda. ستحصل على NumPy، Pandas، scikit-learn، Jupyter وكل ما تحتاجه بأمر واحد، دون التعامل مع مترجمات C أو متغيرات البيئة.

التحقق من عمل NumPy

بمجرد التثبيت، افتح مفسر Python (بكتابة python في الطرفية) واكتب:

output
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)
va-plus-loin

يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة Python NumPy (11 فصلاً، 35 درسًا، تمارين محلولة ومشروع ختامي) تأخذك إلى النهاية.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

الأسئلة الشائعة

كم من الوقت لتعلم Python NumPy؟
مع تقدم منظم (11 فصلاً، 35 درسًا قصيرًا وعمليًا)، يمكن الوصول إلى مستوى تشغيلي في بضعة أسابيع بمعدل 30 إلى 60 دقيقة يوميًا. المهم هو تطبيق كل مفهوم فورًا.
هل هناك متطلبات سابقة؟
تكفي أساسيات الحاسوب. إذا كنت تعرف استخدام الطرفية وقراءة كود بسيط، فأنت جاهز.
من أين نبدأ عمليًا؟
طبّق أوامر هذا المقال، ثم تابع الدورة الكاملة Python NumPy: تربط الـ35 درسًا بالترتيب، مع تمارين ومشروع ختامي.

📬 هل تريد تلقي هذا النوع من الأدلة أسبوعيًا؟ اشترك مجانًا — كود حقيقي، بدون كلام زائد.