Método explicito con Cython

La idea es experimentar que tiempos podemos obtener usando cython.
Para arrancar, vamos a usar como base la implementación en python puro, y simplemente la vamos a compilar.


In [1]:
%matplotlib inline

from trasferencia_calor import solve_explicit, pretty_plot

import time

In [6]:
a = time.time()
t_out, dic = solve_explicit(metodo='explicit_py')
print('Explicito python puro demoro ',time.time() - a, 'segundos')
pretty_plot(t_out, dic)


Explicito python puro demoro  63.748409032821655 segundos

Copiamos la implementación de python en un archivo separado que termina en .pyx y lo compilamos usando el scrip setup.py haciendo:

$ python setup.py build_ext --inplace

In [4]:
a = time.time()
t_out, dic = solve_explicit(metodo='explicit_cython')
print('Explicito cython demoro ',time.time() - a, 'segundos')
pretty_plot(t_out, dic)


Explicito cython demoro  59.29306221008301 segundos

Notar que solo obtuvimos 8 segundo menos.


In [1]:
%matplotlib inline

from trasferencia_calor import solve_explicit, pretty_plot

import time

In [3]:
a = time.time()
t_out, dic = solve_explicit(dz=40, metodo='explicit_cython3')
time.time() - a


Out[3]:
33.561030626297

In [2]:
a = time.time()
t_out, dic = solve_explicit(dz=40, metodo='explicit_cython2')
time.time() - a


Out[2]:
10.870032787322998

In [4]:
a = time.time()
t_out, dic = solve_explicit(dz=40, metodo='explicit_numba')
time.time() - a


Out[4]:
8.381649732589722

In [3]:
pretty_plot(t_out, dic)



In [ ]: