Python للذكاء الاصطناعي متقدم · Advanced 15 دقيقة

NumPy

NumPy for Numerical Computing

المصفوفات متعددة الأبعاد والعمليات المتجهة والبث: أساس الحساب العلمي في Python.

تقدّمك في المسار0%

لماذا NumPy؟

قوائم Python مرنة لكنها بطيئة في العمليات العددية الكبيرة. توفر NumPy مصفوفة ndarray متجانسة النوع مخزنة بشكل متصل في الذاكرة، وعملياتها مكتوبة بلغة C. معظم مكتبات الذكاء الاصطناعي تبني على هذا النموذج أو تتوافق معه.

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

import numpy as np

a = np.array([1, 2, 3])
m = np.array([[1, 2, 3], [4, 5, 6]])
np.zeros((2, 3))
np.ones(4)
np.arange(0, 10, 2)        # [0 2 4 6 8]
np.linspace(0, 1, 5)       # خمس قيم متساوية التباعد
rng = np.random.default_rng(42)
rng.normal(size=(3, 2))    # قيم عشوائية من توزيع طبيعي

الشكل والأبعاد

m.shape    # (2, 3)
m.ndim     # 2
m.dtype    # int64 (حسب المنصة)
m.reshape(3, 2)
m.T        # المنقول

العمليات المتجهة

x = np.array([1.0, 2.0, 3.0])
x * 2          # [2. 4. 6.]
x ** 2         # [1. 4. 9.]
np.exp(x)
x.mean(), x.std(), x.sum()

لا حاجة إلى حلقة؛ العملية تُطبق على كل العناصر.

البث

X = np.array([[1, 2], [3, 4], [5, 6]])   # (3, 2)
mu = X.mean(axis=0)                     # (2,) متوسط كل عمود
X_centered = X - mu                     # بث على كل صف

هذا السطر الأخير هو جوهر عملية توسيط البيانات قبل كثير من الخوارزميات.

الفهرسة المنطقية

scores = np.array([0.4, 0.9, 0.7, 0.2])
scores[scores > 0.5]          # [0.9 0.7]
(scores > 0.5).astype(int)    # [0 1 1 0]

الجبر الخطي

W = np.array([[0.5, -1.0], [2.0, 0.1]])
v = np.array([1.0, 2.0])
W @ v                 # ضرب مصفوفة في متجه
np.linalg.inv(W)
np.linalg.norm(v)

العملية @ هي ضرب المصفوفات، وهي العملية الأساسية في طبقات الشبكات العصبية.

مصطلحات الدرس

البث Broadcasting
قواعد تسمح بإجراء عمليات بين مصفوفات مختلفة الأشكال بتمديد الأبعاد المتوافقة ضمنياً.
العمليات المتجهة Vectorization
تطبيق العملية على المصفوفة كاملة دفعة واحدة بدلاً من المرور على العناصر بحلقة.
المصفوفة ndarray N-dimensional Array
بنية بيانات NumPy الأساسية: شبكة من القيم من نوع واحد لها شكل (shape) محدد.

الملخص

NumPy مكتبة الحساب العددي الأساسية في Python، تقدم المصفوفة ndarray متعددة الأبعاد ذات النوع الموحد، والعمليات المتجهة (vectorized) التي تُنفذ بكفاءة دون حلقات صريحة، وقواعد البث (broadcasting) لإجراء العمليات بين مصفوفات مختلفة الأبعاد، إضافة إلى دوال الجبر الخطي والإحصاء.

أسئلة مراجعة

  1. ما شكل ناتج جمع مصفوفة شكلها (3, 4) مع مصفوفة شكلها (4,)؟

    (3, 4)، إذ يُبث المتجه على كل صف.

  2. لماذا تُفضّل العمليات المتجهة على الحلقات؟

    لأنها تُنفذ داخلياً بشيفرة مترجمة محسنة فتكون أسرع بكثير وأوضح.

المصادر والمراجع

  1. NumPy: the absolute basics for beginners
  2. Broadcasting — NumPy User Guide
  3. Harris et al. (2020) Array programming with NumPy — Nature

إكمال الدرس