NumPyaddition / subtraction
import numpy as np X = np.array([1, 2, 3]) Y = np.array([10, 20, 30]) print(X + Y) # [11 22 33] print(X - Y) # [ -9 -18 -27]
אותן פעולות מתמטיות מן החלק התאורטי — עכשיו בקוד קצר, וקטורי וניתן לבדיקה.
ב-NumPy הפעולות מתבצעות איבר־איבר.
import numpy as np X = np.array([1, 2, 3]) Y = np.array([10, 20, 30]) print(X + Y) # [11 22 33] print(X - Y) # [ -9 -18 -27]
שתי פעולות שונות עם אותו מספר.
a * XX = np.array([1, 2, 3]) a = 5 print(a * X) # [ 5 10 15]
X + aX = np.array([1, 2, 3]) a = 5 print(X + a) # [6 7 8]
הפעולות מן השקופית: X*Y, X/Y, X**Y.
X = np.array([2, 4, 8]) Y = np.array([1, 2, 3]) print(X * Y) # [ 2 8 24] print(X / Y) # [2. 2. 2.666...] print(X ** Y) # [ 2 16 512]
מקרה פשוט ופונקציה כללית.
a*X + b*YX = np.array([1, 0, 2]) Y = np.array([0, 3, 1]) a = 2 b = -1 Z = a * X + b * Y print(Z) # [ 2 -3 3]
def linear_combination(vectors, coefficients): matrix = np.vstack(vectors) coefficients = np.asarray(coefficients) return coefficients @ matrix
שנו את הערכים וראו כמה פעולות במקביל.
הקוד בודק שהצד השמאלי שווה לצד הימני.
X = np.array([1, 2, 3]) Y = np.array([4, 5, 6]) a = 3 left = a * (X + Y) right = a * X + a * Y
np.array_equal(left, right)
זו אינה הוכחה מתמטית כללית, אלא בדיקה מספרית לדוגמה מסוימת.
האופרטור @ או הפונקציה np.dot.
X = np.array([1, 2, 3]) Y = np.array([4, 5, 6]) print(X @ Y) # 32 print(np.dot(X, Y)) # 32
X * Y מחזיר וקטור; X @ Y מחזיר סקלר.מדידה מעשית של פעולה וקטורית.
import timeit import numpy as np n = 1_000_000 X = np.ones(n) Y = np.ones(n) elapsed = timeit.timeit( lambda: X @ Y, number=20 ) print(elapsed)
רשימת התרגילים המקורית נשמרה ללא החלפה.
הכנה לפני תרגילי הספר.
חשבו את X*Y ואת X@Y.
מה מחזיר הקוד?
X = np.array([1, 2, 3]) Y = np.array([4, 5, 6]) 2 * X + Y
[ 6 9 12]
התאמה ישירה בין סימון מתמטי לקוד.
+ ו-- פועלים איבר־איבר.a*X הוא כפל בסקלר; X+a הוא broadcasting.X*Y, X/Y, X**Y הן פעולות איבר־איבר.a*X+b*Y.@ מחשב מכפלה פנימית.סעיפים 1.8–1.9 נשמרו והורחבו.