Array math (פעולות מתמטיות על מערכים)

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]