من الشكل للفعل
في الدرس اللي فات عرفنا الـ matrix (المصفوفة) إيه — جدول أرقام مستطيل بيمثّل بيانات، أو transformations (تحويلات)، أو أنظمة معادلات. بس الجدول الثابت ده نص الحكاية بس. القوة الحقيقية للـ matrices بتيجي من اللي بنعمله بيها. العمليات دي بتحوّل الـ matrix من مجرد مكان بنحط فيه أرقام لمحرك شغّال، بيحرّك الحسابات في الـ machine learning (تعلّم الآلة) والجرافيكس والفيزياء، وتقريبًا في كل علم بيتعامل مع أرقام.
الدرس ده بيغطّي العمليات الأساسية: الجمع، والضرب في scalar (عدد قياسي)، وضرب matrix في vector (متجه)، وضرب matrix في matrix، والـ transpose (المنقولة)، والـ trace (الأثر). كل عملية ليها تعريف ميكانيكي، وليها كمان معنى هندسي أعمق. لو فهمت الاتنين، الحسابات هتحسّها منطقية مش حاجة محفوظة.
جمع الـ matrices
أبسط عملية هي الجمع. عشان تجمع matrix على matrix، بتجمع العناصر اللي قصاد بعض وخلاص. العنصر اللي في الصف i والعمود j من A + B هو مجموع العنصرين (i,j) في A وفي B. وده اسمه جمع عنصر بعنصر.
فيه شرط واحد: الاتنين لازم يكون ليهم نفس الأبعاد. مينفعش تجمع matrix مقاسها 3×2 على واحدة مقاسها 2×3 — الشكلين لازم يبقوا زي بعض بالظبط. الطرح نفس الفكرة: بتطرح العناصر اللي قصاد بعض. والنتيجة دايمًا بنفس أبعاد اللي دخلوا.
جمع الـ matrices commutative (تبادلي): A + B = B + A. وكمان associative (تجميعي): (A + B) + C = A + (B + C). والـ zero matrix (المصفوفة الصفرية، كل عناصرها أصفار) بتشتغل محايد للجمع: A + 0 = A. وكل matrix ليها معكوس في الجمع: A + (−A) = 0.
الضرب في scalar
عشان تضرب matrix في scalar (رقم واحد)، بتضرب كل عنصر فيها في الرقم ده. لو A مقاسها m×n وc رقم، يبقى cA هي الـ matrix اللي مقاسها m×n وكل عنصر فيها (cA)ij = c · aij. العملية دي ملهاش أي شرط على الأبعاد — بتشتغل مع أي matrix وأي رقم.
هندسيًا، الضرب في scalar بيكبّر أو بيصغّر الـ transformation اللي الـ matrix بتمثّلها. الضرب في 2 بيضاعف كل المسافات؛ الضرب في −1 بيعكس كل حاجة حوالين نقطة الأصل؛ والضرب في 0 بيلمّ كل حاجة في الـ zero matrix.
ضرب matrix في vector: نظرة الأعمدة
ضرب الـ matrix في vector، Ax، هو أهم عملية في الـ linear algebra (الجبر الخطي). لو عندك matrix اسمها A مقاسها m×n وvector اسمه x مقاسه n×1، يبقى Ax هو vector مقاسه m×1. فيه طريقتين متساويتين تحسبه بيهم، ولو فهمت الاتنين هتشوف الموضوع من فوق.
نظرة الصفوف: كل عنصر في النتيجة هو الـ dot product (الضرب الداخلي) بين الصف المقابل في A والـ vector x. دي الطريقة الميكانيكية.
نظرة الأعمدة: Ax هو linear combination (تركيب خطي) لأعمدة A، وعناصر x هي المعاملات. الفكرة دي قوية هندسيًا — بتوريك إن Ax بـ"يخلط" أعمدة A بالأوزان اللي في x. وأي linear transformation تقدر تفهمها بالشكل ده.
ضرب matrix في matrix
ضرب الـ matrices هو تعميم لضرب الـ matrix في vector. عشان تضرب A (مقاسها m×k) في B (مقاسها k×n)، الأبعاد الداخلية لازم تتطابق: A فيها k عمود، وB فيها k صف. والنتيجة AB مقاسها m×n.
العنصر (i,j) في AB هو الـ dot product بين الصف i من A والعمود j من B. وتقدر كمان تفكّر فيها كده: العمود j من AB بيساوي A مضروبة في العمود j من B. يعني كل عمود في النتيجة هو linear combination لأعمدة A — نظرة الأعمدة تاني.
دايمًا اتأكد من الأبعاد قبل ما تضرب. عشان AB يبقى ليه معنى: عدد أعمدة A لازم يساوي عدد صفوف B. لو A مقاسها m×k وB مقاسها k×n، النتيجة مقاسها m×n. ولو الأبعاد الداخلية مختلفة، يبقى حاصل الضرب مالوش وجود أصلًا.
الترتيب بيفرق: الضرب مش commutative
من أهم الفروق بين ضرب الـ matrices وضرب الأرقام العادية إن الـ matrices مش commutative. في العموم AB ≠ BA. ودي مش حالة شاذة — دي القاعدة. حتى لو الحاصلين ليهم معنى ونفس الأبعاد، غالبًا هيطلعوا matrices مختلفة.
بس ضرب الـ matrices هو associative: (AB)C = A(BC). يعني تقدر تغيّر مكان الأقواس من غير ما النتيجة تتغيّر — بس مينفعش تبدّل ترتيب العوامل. والضرب كمان distributive (توزيعي): A(B + C) = AB + AC و(A + B)C = AC + BC.
الـ transpose
الـ transpose بتاع matrix اسمها A، وبنكتبه AT، بيطلع لما تبدّل الصفوف بالأعمدة. العنصر اللي في الصف i والعمود j من A بيبقى في الصف j والعمود i من AT. لو A مقاسها m×n، يبقى AT مقاسها n×m.
الـ transpose ليه قاعدة حلوة في الضرب: الـ transpose بتاع حاصل ضرب بيعكس الترتيب. والقاعدة دي بتتعمّم: (ABC)T = CTBTAT. والعكس ده ضروري — لو نسيته، الأبعاد مش هتظبط.
الـ matrix بنقول عليها symmetric (متماثلة) لو AT = A. الـ symmetric matrices بتظهر طول الوقت في الإحصاء والفيزياء والـ optimization (التحسين) — زي مصفوفات الـ covariance، والـ Hessian في التفاضل، ومصفوفة Gram XTX؛ كلهم symmetric. وليهم خصائص بتخلّي التعامل معاهم أسهل.
الـ trace
الـ trace بتاع square matrix (مصفوفة مربعة) هو مجموع عناصر القطر الرئيسي. ورغم إنه بسيط، بيظهر في مواضيع متقدمة زي نظرية الـ eigenvalues (القيم الذاتية)، والـ optimization (الـ gradient بتاع trace)، وميكانيكا الكم.
خاصية مهمة: trace(AB) = trace(BA)، حتى لو AB ≠ BA في العموم. الـ cyclic property (الخاصية الدورية) دي بتستخدم طول الوقت في تفاضل الـ matrices وفي الـ machine learning. والـ trace كمان بيساوي مجموع الـ eigenvalues بتاعة الـ matrix — رابط عميق بيظهر في نظرية الطيف.
التكلفة الحسابية
ضرب الـ matrices هو الحصان الشغّال في الحوسبة الحديثة، بس تكلفته عالية. ضرب matrix مقاسها m×k في واحدة مقاسها k×n محتاج O(mkn) عملية — تقريبًا m × k × n من عمليات الضرب والجمع. ولو الـ matrices مربعة n×n، يبقى O(n3).
ومع الـ matrices الكبيرة، التكلفة دي بتبقى تقيلة. ضرب matrix مقاسها 1000×1000 في واحدة زيها محتاج حوالي 109 عملية. وعشان كده الـ deep learning النهارده معتمد على GPUs، اللي بتنفّذ آلاف عمليات الضرب والجمع في نفس اللحظة.
ليه العمليات دي مهمة
العمليات دي مش تمارين نظرية — دي الطوب الأساسي اللي العلم والهندسة الحديثة مبنيين بيه:
الـ neural networks (الشبكات العصبية): كل layer بتعمل affine transformation، Ax + b، فيها A هي matrix الأوزان وb هو vector الـ bias. التدريب بيعدّل A وb عشان يقلّل الـ loss function. والـ forward pass كله في شبكة عميقة هو سلسلة من ضرب الـ matrices.
الجرافيكس: الدوران في 3D والتكبير والـ perspective projection كلهم linear transformations بتمثّلهم matrices. ورسم مشهد 3D معناه إنك بتضرب كل نقطة في سلسلة من matrices التحويل.
الإحصاء: الـ covariance matrix لـ dataset اسمها X (والصفوف هي المشاهدات) بتتناسب مع XTX. الـ symmetric matrix دي بتوصف المتغيرات بتتغيّر مع بعض إزاي — وهي في قلب PCA والـ linear regression وطرق تانية كتير.
الـ signal processing (معالجة الإشارات): الـ convolution والـ filtering وتحويلات Fourier كلهم تقدر تكتبهم ضرب matrices. والـ DFT (تحويل فورييه المتقطع) هو ضرب matrix في vector مع complex matrix معيّنة.
- جمع الـ matrices عنصر بعنصر ولازم الأبعاد تبقى واحدة. وهو commutative وassociative.
- الضرب في scalar بيضرب كل عنصر في نفس الرقم — من غير أي شرط على الأبعاد.
- Ax هو linear combination لأعمدة A بأوزان x — وده أساس الـ linear transformations.
- ضرب الـ matrices محتاج الأبعاد الداخلية تتطابق. العنصر (i,j) في AB هو الـ dot product بين الصف i من A والعمود j من B.
- ضرب الـ matrices مش commutative (AB ≠ BA في العموم)، بس هو associative وdistributive.
- الـ transpose بيبدّل الصفوف بالأعمدة. (AB)T = BTAT — الترتيب بيتعكس.
- الـ trace هو مجموع عناصر القطر. trace(AB) = trace(BA) بالـ cyclic property.
- ضرب square matrices مقاسها n×n بيكلّف O(n3) — والـ GPUs بتسرّعه بالتوازي.