בשיעור זה נבין איך בדיוק מחשבים כפל בין מטריצות.
לפני שנדון בפירוט נשים לב שכפל מטריצות אינו קומוטטיבי, ז”א אם נחליף סדר התוצאה תשתנה ולכן יש חשיבות מי היא המטריצה הראשונה ומי השניה בפעולת הכפל.
כמו כן נשים לב שכפל בין שני מטריצות מייצר מטריצה חדשה שהמימדים שלה שונים. מספר השורות של מטריצת התוצאה הינו כמספר השורות של המטריצה הראשונה ומספר העמודות של מטריצת התוצאות הינו כמספר העמודות של המטריצה השניה. כמו כן תנאי לכך שבכלל ניתן להכפיל מטריצות הינו שמספר העמודות של המטריצה הראשונה זהה למספר השורות של המטריצה השניה, אחרת לא ניתן להכפיל בין המטריצות.
למשל בין המטריצות הבאות לא ניתן לבצע מכפלה:
כי במטריצה הראשונה יש 2 עמודות ובמטריצה השניה יש שלוש (ולא שתים) שורות.
איך בפועל מחשבים כפל מטריצות ?
נסתכל על שתי מטריצות האחת בגודל 3×2 (ז”א שלוש שורות ושתי עמודות) עם איברי a (a11,a12,… וכו’) והשניה בגודל 2×3 עם איברי b.
שימו לב שהמספרים הסידוריים ליד a או b מייצגים מיקום במטריצה. למשל a12 הינו האיבר שבשורה ראשונה ועמודה שניה.
ונכפיל את שתי המטריצות האלו פעם בסדר הזה ופעם בסדר הפוך.
מדוע בכלל ניתן להכפיל את המטריצות בסדר הזה ובסדר ההפוך ?
בסדר הזה מספר העמודות של המטריצה הראשונה זהה למספר השורות של המטריצה השניה והינו 2 ובסדר ההפוך תנאי זה גם מתקיים והינו 3.
אם כן התוצאה הינה מטריצה בגודל 3×3 ומחשבים אותה ע”י סכימה של המכפלות. אז למשל איבר במיקום 1 על 1 (שורה ראשונה עמודה ראשונה) יחושב כסכום המכפלות של שורה ראשונה ממטריצה ראשונה (של ה aים) עם העמודה הראשונה של המטריצה השניה (של ה b ים) a11b11+a12b21
האיבר בשורה ראשונה ועמודה שניה במטריצה התוצאה יחושב ע”י a11b12+a12b22
וכך הלאה… למעשה תמיד האינדקס של איבר במטריצת התוצאה אומר איזה שורה לקחת מהמטריצה הראשונה ואיזה עמודה לקחת מהמטריצה השניה.
נראה מורכב למי שרואה זאת בפעם הראשונה אך עם קצת תירגול זה נהיה מאוד טכני. כל מה שצריך לזכור זה שורות של מטריצה ראשונה ועמודות ממטריצה שניה!
נדגים זאת עם מספרים אמיתיים, נכפיל שתי מטריצות A,B בגודל 2×2 ונקבל את מטריצת התוצאה באופן הבא.
למשל איבר 1,2 (שורה ראשונה, עמודה שניה) של מטריצת התוצאה מתקבל ע”י סכום המכפלות של שורה ראשונה ממטריצה ראשונה עם עמודה שניה ראשונה: 1(-1) + 21=3
למי שדואג שהחישוב אינו ברור או לא מוטמע מספיק אוכל להגיד שבפועל כשמפתחים אלגוריתמים בלמידה עמוקה לא ממש צריך להתעסק עם זה, כי כבר יש פונקציות מוכנות שעושות זאת בישבילנו.
לכן לא אקדיש לכך זמן נוסף ורק מי שרוצה להתעמק יעבור על דוגמאות אלו שוב ושוב.
מה שכן חשוב לנו בתור מפתחים זה להבין את המימדים, ז”א לאילו גדלי מטריצות ניתן לבצע מכפלות ואילו לא, ומה צפויים להיות המימדים של מטריצת התוצאה.