What is the most efficient way to map a function over a numpy array? The way I've been doing it in my current project is as follows:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
# Obtain array of square of each element in x
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])
However, this seems like it is probably very inefficient, since I am using a list comprehension to construct the new array as a Python list before converting it back to a numpy array.
Can we do better?
Best Answer
I've tested all suggested methods plus
np.array(map(f, x))
withperfplot
(a small project of mine).If the function you're trying to vectorize already is vectorized (like the
x**2
example in the original post), using that is much faster than anything else (note the log scale):If you actually need vectorization, it doesn't really matter much which variant you use.
Code to reproduce the plots: