Efficient evaluation of a function at every cell of a NumPy array
arrays, numpy, performance, python, vectorization
Solution
You could just vectorize the function and then apply it directly to a Numpy array each time you need it:
import numpy as np
def f(x):
return x * x + 3 * x - 2 if x > 0 else x * 5 + 8
f = np.vectorize(f) # or use a different name if you want to keep the original f
result_array = f(A) # if A is your Numpy array
It's probably better to specify an explicit output type directly when vectorizing:
f = np.vectorize(f, otypes=[np.float])
Problem
Given NumPy array `A`, what is the fastest/most efficient way to apply the same function `f()` to every cell? I assign to `A(i,j)` by `f(A(i,j))`. Function `f()` doesn't have binary output, so masking operations won't help. Is double loop iteration through every cell the optimal solution?