כפל מטריצה היא פעולה המייצרת מטריצה בודדת על ידי לקיחת שתי מטריצות כקלט והכפלת שורות של המטריצה הראשונה לעמודה של המטריצה השנייה. שימו לב שעלינו לוודא שמספר השורות במטריצה הראשונה צריך להיות שווה למספר העמודות במטריצה השנייה.
ב-Python, תהליך הכפל המטריצה באמצעות NumPy ידוע בשם וקטוריזציה . המטרה העיקרית של וקטוריזציה היא להסיר או לצמצם את עבור לולאות שבו השתמשנו במפורש. על ידי הפחתת לולאות 'עבור' מתוכניות נותנת חישוב מהיר יותר. החבילה המובנית NumPy משמשת למניפולציה ועיבוד מערך.
אלו שלוש שיטות שבאמצעותן נוכל לבצע כפל מטריצת numpy.
- ראשית הוא השימוש בפונקציית multiply() אשר מבצעת כפל אלמנט של המטריצה.
- שנית הוא השימוש בפונקציה matmul() אשר מבצעת את מכפלת המטריצה של שני מערכים.
- אחרון הוא השימוש בפונקציה dot() אשר מבצעת תוצר נקודות של שני מערכים.
דוגמה 1: כפל מטריצה לפי יסוד
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.multiply(array1,array2) result
בקוד למעלה
- ייבאנו numpy עם שם הכינוי np.
- יצרנו מערך 1 ומערך 2 באמצעות הפונקציה numpy.array() עם ממד 3.
- יצרנו תוצאת משתנה והקצנו את הערך המוחזר של הפונקציה np.multiply() .
- עברנו גם את המערך array1 וגם את מערך2 ב-np.multiply().
- לבסוף, ניסינו להדפיס את ערך התוצאה.
בפלט הוצגה מטריצה תלת מימדית שהאלמנטים שלה הם תוצאה של הכפל אלמנט של רכיבי array1 וגם array2.
תְפוּקָה:
array([[[ 9, 16, 21], [24, 25, 24], [21, 16, 9]]])
דוגמה 2: תוצר מטריקס
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.matmul(array1,array2) result
תְפוּקָה:
array([[[ 30, 24, 18], [ 84, 69, 54], [138, 114, 90]]])
בקוד למעלה
- ייבאנו numpy עם שם הכינוי np.
- יצרנו array1 ומערך2 באמצעות הפונקציה numpy.array() עם ממד 3.
- יצרנו תוצאת משתנה והקצנו את הערך המוחזר של הפונקציה np.matmul() .
- עברנו גם את המערך array1 וגם את מערך2 ב-np.matmul().
- לבסוף, ניסינו להדפיס את ערך התוצאה.
בפלט הוצגה מטריצה תלת מימדית שהאלמנטים שלה הם מכפלה של רכיבי array1 וגם array2.
דוגמה 3: מוצר נקודה
אלו הם המפרטים הבאים עבור numpy.dot:
- כאשר גם a וגם b הם מערכים 1-D (חד מימדי)-> מכפלה פנימית של שני וקטורים (ללא צימוד מורכב)
- כאשר גם a וגם b הם מערכים דו מימדיים (דו מימדיים) -> כפל מטריקס
- כאשר a או b הם 0-D (ידוע גם כסקלר) -> הכפל באמצעות numpy.multiply(a, b) או a * b.
- כאשר a הוא מערך N-D ו-b הוא מערך 1-D -> מכפלת סכום על הציר האחרון של a ו-b.
- כאשר a הוא מערך N-D ו-b הוא מערך M-D בתנאי ש-M>=2 -> מכפלת סכום על הציר האחרון של a והציר השני-לאחרון של b:
כמו כן, dot(a,b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.dot(array1,array2) result
בקוד למעלה
- ייבאנו numpy עם שם הכינוי np.
- יצרנו array1 ומערך2 באמצעות הפונקציה numpy.array() עם ממד 3.
- יצרנו תוצאת משתנה והקצנו את הערך המוחזר של הפונקציה np.dot() .
- עברנו גם את המערך array1 וגם את מערך2 ב-np.dot().
- לבסוף, ניסינו להדפיס את ערך התוצאה.
בפלט הוצגה מטריצה תלת מימדית שהאלמנטים שלה הם מכפלת הנקודה של רכיבי array1 ו-array2 כאחד.
תְפוּקָה:
array([[[[ 30, 24, 18]], [[ 84, 69, 54]], [[138, 114, 90]]]])