Попробуем рекурсивное вычисление чисел Фибоначчи:

 

def fib(n):
    if n<2:
        return n
    return fib(n-1)+fib(n-2)

%timeit fib(20)
100 loops, best of 3: 5.53 ms per loop

 

Процесс можно ускорить в ~3 раза если выполнить данную операцию в Cython:

 

%load_ext Cython

 

%%cython

def fib_cython(n):
    if n<2:
        return n
    return fib_cython(n-1)+fib_cython(n-2)

 

%timeit fib_cython(20)
1000 loops, best of 3: 1.79 ms per loop

 

Если указать тип переменных («strong typing», что является частью программирования на C или Julia), то можно получить ускорение в 100 раз:

 

%%cython
cpdef long fib_cython_type(long n):
    if n<2:
        return n
    return fib_cython_type(n-1)+fib_cython_type(n-2)

 

%timeit fib_cython_type(20)
10000 loops, best of 3: 54.3 µs per loop
Write a comment:

*

Your email address will not be published.

© 2014 In R we trust.
Top
Follow us: