Create Your Own ufunc
🛠️ Creating Your Own ufunc in NumPy
NumPy allows you to create custom universal functions (ufuncs), which can then operate element-wise on NumPy arrays just like built-in ufuncs.
There are two main ways:
-
Using
np.vectorize()(Python-level, slower, but easy) -
Using NumPy C-API or Numba (fast, compiled, advanced)
Here, we focus on np.vectorize(), which is sufficient for most Python use-cases.
1. Using np.vectorize()
np.vectorize() wraps a Python function so it can be applied element-wise to arrays.
-
Works element-wise
-
Can handle any Python function
2. Using Lambda Function
-
Compact and convenient for simple functions
3. Using otypes Parameter
You can specify output type with otypes to avoid type inference issues.
4. Using Multiple Inputs
-
Supports multiple array inputs
-
Element-wise operations are performed
5. Example: Conditional Function ufunc
-
Useful for categorical transformations
🧠 Notes
-
np.vectorize()is not truly compiled; it’s essentially a for loop in Python. -
For high-performance ufuncs, consider Numba’s
@vectorizedecorator or Cython. -
Can handle scalars, arrays, multiple inputs, and different output types.
🎯 Practice Exercises
-
Create a ufunc that computes f(x) = x^3 – x + 2 for an array.
-
Create a ufunc that classifies numbers as even/odd.
-
Create a ufunc with two inputs that computes
x^2 + y^2.
