Element-wise Operations
Operations applied to each element:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# Arithmetic
print(arr + 10) # [11, 12, 13, 14, 15]
print(arr * 2) # [2, 4, 6, 8, 10]
print(arr ** 2) # [1, 4, 9, 16, 25]
# Between arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2) # [5, 7, 9]
print(arr1 * arr2) # [4, 10, 18]
Mathematical Functions
NumPy provides many math functions:
arr = np.array([1, 4, 9, 16, 25])
# Basic statistics
print(np.sum(arr)) # 55
print(np.mean(arr)) # 11.0
print(np.std(arr)) # Standard deviation
print(np.var(arr)) # Variance
# Min/Max
print(np.min(arr)) # 1
print(np.max(arr)) # 25
print(np.argmin(arr)) # Index of min: 0
print(np.argmax(arr)) # Index of max: 4
Universal Functions (ufunc)
Fast element-wise functions:
arr = np.array([1, 4, 9, 16, 25])
# Trigonometric
angles = np.array([0, np.pi/2, np.pi])
print(np.sin(angles))
print(np.cos(angles))
# Exponential and logarithmic
print(np.exp(arr)) # e^x
print(np.log(arr)) # Natural log
print(np.log10(arr)) # Base 10 log
print(np.sqrt(arr)) # Square root
Array Broadcasting
Operations between arrays of different shapes:
# 1D array
arr = np.array([1, 2, 3])
# Broadcasting with scalar
print(arr + 5) # [6, 7, 8]
# Broadcasting with 2D
matrix = np.array([[1], [2], [3]])
print(arr + matrix) # [[2, 3, 4], [3, 4, 5], [4, 5, 6]]
Matrix Operations
Linear algebra operations:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# Matrix multiplication
print(np.dot(a, b)) # [[19, 22], [43, 50]]
print(a @ b) # Same (Python 3.5+)
# Transpose
print(a.T) # [[1, 3], [2, 4]]
# Determinant
print(np.linalg.det(a)) # -2.0
# Inverse
print(np.linalg.inv(a)) # Inverse matrix
Statistical Operations
Statistical functions:
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# Percentiles
print(np.percentile(arr, 50)) # Median: 5.5
print(np.percentile(arr, [25, 75])) # Quartiles
# Median
print(np.median(arr)) # 5.5
# Correlation
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([2, 4, 6, 8, 10])
print(np.corrcoef(arr1, arr2)) # Correlation matrix
Best Practices
- Use vectorized operations: Much faster than loops
- Avoid Python loops: NumPy operations are optimized
- Use broadcasting: Efficient operations on different shapes
- Choose appropriate dtypes: int32 vs int64 based on needs
Next Steps
Learn about creating arrays or indexing and slicing.