Are NumPy's math functions faster than Python's?

前端 未结 3 999
不思量自难忘°
不思量自难忘° 2020-11-27 16:00

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 examp

3条回答
  •  广开言路
    2020-11-27 16:40

    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!

提交回复
热议问题