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 Solution

I've tested all suggested methods plus

`np.array(map(f, x))`

with`perfplot`

(a small project of mine).If the function you're trying to vectorize already

isvectorized (like the`x**2`

example in the original post), using that ismuchfaster 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: