Are NumPy's math functions faster than Python's?
numpy, performance, python
Solution
Here are the timing results:
lebigot@weinberg ~ % python -m timeit 'abs(3.15)'
10000000 loops, best of 3: 0.146 usec per loop
lebigot@weinberg ~ % python -m timeit -s 'from numpy import abs as nabs' 'nabs(3.15)'
100000 loops, best of 3: 3.92 usec per loop
`numpy.abs()` is slower than `abs()` because it also handles Numpy arrays: it contains additional code that provides this flexibility.
However, Numpy is fast on arrays:
lebigot@weinberg ~ % python -m timeit -s 'a = [3.15]*1000' '[abs(x) for x in a]'
10000 loops, best of 3: 186 usec per loop
lebigot@weinberg ~ % python -m timeit -s 'import numpy; a = numpy.empty(1000); a.fill(3.15)' 'numpy.abs(a)'
100000 loops, best of 3: 6.47 usec per loop
(PS: `'[abs(x) for x in a]'` is slower in Python 2.7 than the better `map(abs, a)`, which is about 30 % faster—which is still much slower than NumPy.)
Thus, `numpy.abs()` does not take much more time for 1000 elements than for 1 single float!
Problem
I have a function defined by a combination of basic math functions (abs, cosh, sinh, exp, ...). I was wondering if it makes a difference (in speed) to use, for example, `numpy.abs()` instead of `abs()`?