Universal functions (ufunc) are special NumPy functions that operate on ndarrays in an element-by-element fashion.
They represent a vast array of vectorized functions that perform much better than iterative implementations and let you write concise code. Most ufuncs achieve this by providing a Python wrapper around a C implementation.
In