الدرس 3 من 8

المصفوفات (Matrices)

لو المتجه صف واحد، المصفوفة جدول كامل.

المصفوفة = جدول

المصفوفة (Matrix) مجموعة متجهات فوق بعض. شيت Excel فيه ٤ شقق وكل شقة ليها ٣ معلومات، ده مصفوفة ٤×٣: ٤ صفوف و ٣ أعمدة. الرقمين دول اسمهم الـ shape.

💡 هنستخدم NumPyالمكتبة دي هنتعلمها بالتفصيل في المرحلة الجاية، بس هنبدأ بيها هنا لأنها مصممة للحاجات دي بالظبط. سطّبها جوه الـ venv بـ pip install numpy.
matrix.py
import numpy as np

# Each row = one apartment: [area, rooms, floor]
apartments = np.array([
    [120, 3, 5],
    [90,  2, 1],
    [150, 4, 8],
    [75,  2, 3],
])

print("Shape:", apartments.shape)    # (rows, columns)
print("Second apartment:", apartments[1])
print("All areas:", apartments[:, 0])  # all rows, column 0

ضرب مصفوفة في متجه

ده أهم عملية في الـ AI كله. تخيل إنك عايز تقدّر سعر الشقة بمعادلة بسيطة: كل متر بـ ٢٠ ألف، وكل أوضة بـ ١٠٠ ألف، وكل دور بـ ١٠ آلاف. الأرقام دي اسمها weights (أوزان).

لو ضربت مصفوفة الشقق في متجه الأوزان، بتعمل dot product بين كل صف والأوزان، فبتطلع سعر كل الشقق مرة واحدة:

prices.py
import numpy as np

apartments = np.array([
    [120, 3, 5],
    [90,  2, 1],
    [150, 4, 8],
])
weights = np.array([20_000, 100_000, 10_000])  # per m2, per room, per floor

prices = apartments @ weights   # @ = matrix multiplication
for p in prices:
    print(f"{p:,} EGP")
🤖 ده بالظبط الـ Neural Networkطبقة في شبكة عصبية بتعمل نفس الحكاية: بتضرب الداتا في مصفوفة weights. الفرق الوحيد إن الموديل بيتعلم الأوزان دي لوحده من الداتا بدل ما انت تحددها. والتعلم ده هو موضوع درس الـ gradient descent.

الـ Transpose

بتقلب المصفوفة: الصفوف تبقى أعمدة والأعمدة تبقى صفوف. مصفوفة ٤×٣ تبقى ٣×٤. هتحتاجها كتير عشان تظبط الـ shapes.

transpose.py
import numpy as np

m = np.array([[1, 2, 3],
              [4, 5, 6]])
print(m.shape)
print(m.T)          # .T = transpose
print(m.T.shape)
الدرس اللي فات