Array math (פעולות מתמטיות על מערכים)#
ב־NumPy פונקציות מתמטיות בסיסיות פועלות איבר־איבר (elementwise). כלומר, הפעולה מתבצעת על כל זוג איברים מקבילים במערכים, והתוצאה היא מערך חדש. אותן פעולות זמינות גם כאופרטורים (+, -, *, /) וגם כפונקציות מתוך NumPy.
🤖 Ask PyProf.
import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
# Elementwise sum; both produce the array
print(x + y)
print(np.add(x, y))
# Elementwise difference; both produce the array
print(x - y)
print(np.subtract(x, y))
# Elementwise product; both produce the array
print(x * y)
print(np.multiply(x, y))
# Elementwise division; both produce the array
print(x / y)
print(np.divide(x, y))
# Elementwise square root; produces the array
print(np.sqrt(x))
[[ 6. 8.]
[10. 12.]]
[[ 6. 8.]
[10. 12.]]
[[-4. -4.]
[-4. -4.]]
[[-4. -4.]
[-4. -4.]]
[[ 5. 12.]
[21. 32.]]
[[ 5. 12.]
[21. 32.]]
[[0.2 0.33333333]
[0.42857143 0.5 ]]
[[0.2 0.33333333]
[0.42857143 0.5 ]]
[[1. 1.41421356]
[1.73205081 2. ]]
שימו לב: האופרטור * ב־NumPy מייצג כפל איבר־איבר (elementwise). כדי לבצע כפל מטריציוני אמיתי יש להשתמש בפונקציה dot - או כמתודה על המערך (a.dot(b)) או כפונקציה במודול (np.dot(a,b)).
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11,12])
מכפלה פנימית (inner product) של שני וקטורים חד־ממדיים מחזירה סקלר.
print(v.dot(w))
print(np.dot(v, w))
219
219
מכפלת מטריצה־וקטור מחזירה וקטור חדש (Rank 1).
print(x.dot(v)) # [29 67]
print(np.dot(x, v)) # [29 67]
[29 67]
[29 67]
מכפלת מטריצה־מטריצה מחזירה מטריצה חדשה (Rank 2).
print(x.dot(y))
print(np.dot(x, y))
[[19 22]
[43 50]]
[[19 22]
[43 50]]
פונקציה שימושית נוספת היא sum:
import numpy as np
x = np.array([[1,2],[3,4]])
print(np.sum(x)) # Compute sum of all elements
print(np.sum(x, axis=0)) # Compute sum of each column
print(np.sum(x, axis=1)) # Compute sum of each row
10
[4 6]
[3 7]
לעיתים נרצה לשנות צורה או לבצע מניפולציות אחרות על המערך. הדוגמה הפשוטה ביותר היא טרנספוזיציה (T):
import numpy as np
x = np.array([[1,2], [3,4]])
print(x)
print(x.T)
# Note that taking the transpose of a rank 1 array does nothing:
v = np.array([1,2,3])
print(v)
print(v.T)
[[1 2]
[3 4]]
[[1 3]
[2 4]]
[1 2 3]
[1 2 3]