Cython: Acelere su código Python

cython

Acelere su código Python con Cython

Cython: extensiones C para Python


Probablemente haya escuchado a gente quejarse de que Python es muy lento. A menudo comparan Python con el lenguaje C en términos de tiempo de ejecución de código.

Una cosa que olvidan es que Python es un lenguaje de nivel superior que C, y nos permite escribir código de una manera más cercana a cómo piensan los humanos.

El lenguaje de programación C es de hecho muchas veces más rápido que el lenguaje de programación Python en términos de tiempo de ejecución de código. Aún así, si incluye el tiempo de desarrollo, Python a menudo supera al lenguaje C.

Si desea acelerar su código Python, hay una opción disponible para usted, Cython. En este artículo, discutiremos qué es y cómo podemos usarlo para acelerar nuestro código Python. ¡Empecemos!


Cython

Es una extensión de C para Python. Le permite escribir código Python puro con algunos cambios menores, que se traduce en código C y le proporciona un alto rendimiento, al igual que el lenguaje de programación C.

Si desea tener sintaxis fáciles como Python y alto rendimiento como el lenguaje C, esto es para usted. Es una combinación de lenguajes de programación Python y C.

Con Cython, puede escribir su código utilizando la sintaxis simple de Python y lograr un alto rendimiento del lenguaje C.

Instalación

El proceso de instalación es diferente para cada sistema operativo. Necesitamos un compilador de C para usar Cython. Puede comprobar la compatibilidad de los compiladores de C para diferentes sistemas operativos aquí.

Una vez que el compilador de C está instalado en el sistema, simplemente podemos instalarlo usando el comando pip:

pip install Cython

Tipos de datos disponibles en Cython

Podemos utilizar todos los tipos estáticos para declarar las variables y funciones que están disponibles en el lenguaje C/C++.

Declarar una variable en Cython:

Podemos usar tipos de datos como intfloatdoublelistdict, object, etc. para declarar la variable.

Ejemplo:

cdef int x = 10;

Declarar una función en Cython:

A continuación se muestran las formas que podemos usar para escribir funciones:

  • def: para funciones regulares de Python. Solo se pueden llamar desde Python.
  • cdef: solo para funciones de Cython. No se puede acceder a ellos desde el código Python, se deben llamar dentro de Cython.
  • cpdef: para C y Python. Se puede acceder a las funciones definidas con el tipo cpdef desde código Python y C.

Ejemplo:

cdef int addition(int x, int y):
return x + y

Aquí, puede ver que la sintaxis es la misma que la del lenguaje Python, pero necesitamos usar estáticamente el tipo de datos con cada declaración de variable.

¿Cómo utilizar Cython?

Puede usarlo fácilmente en Jupyter Notebook. Jupyter Notebook es una herramienta web interactiva que se utiliza para desarrollar proyectos basados en ciencia de datos y python.

Para ejecutar el código en Jupyter Notebook, debe ejecutar:

%load_ext Cython

Ahora, siempre que desee ejecutar código, debemos agregar este comando en la celda de código:

%%cython

Después de completar estos dos pasos, puede comenzar a escribir código Cython en el cuaderno.

¿Qué tan rápido es Cython?

Sabemos cómo declaramos una variable en Cython y sobre su sintaxis. Ahora, queremos comparar cuánto más rápido es en comparación con Python.

Tomemos un ejemplo del número de Fibonacci y calculemos el tiempo de ejecución con Cython y Python.

Código Python:

def Fibonacci(n):
    if n<0:
        print("Input should be greater than zero")
# First Fibonacci number is 0
    elif n==0:
        return 0
# Second Fibonacci number is 1
    elif n==1:
        return 1
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)
      
start = time.time()
a = fibonacci(38)
end = time.time()
print(a)
print("Execution time: ", end-start)
Output:24157817 
Execution time: 14.819252490997314

Aquí podemos ver que se necesitaron 14,81 segundos para calcular el número 38 de Fibonacci. Ahora veamos cómo funciona el código Cython en el mismo cálculo.

Código Cython:

%%cython 
cpdef fibonacci_c(int n):
    if n < 0:
        print("1st fibonacci number = 0")
    elif n == 1:
        return 0
    elif n == 2:
        return 1
    else:
        return fibonacci_c(n-1) + fibonacci_c(n-2)
    
start = time.time()
a = fibonacci_c(38)
end = time.time()
print(a)
print("Execution time: ", end-start)
Output:24157817
Execution time: 0.6341381072998047

Aquí podemos ver que el código Cython es alrededor de 23,5 veces más rápido que el código Python. Este ejemplo muestra perfectamente las capacidades de usarlo.

Características de Cython

  • Cython tiene total compatibilidad con Python y es eficiente y fácil de usar.
  • Escriba código Python que llame de un lado a otro desde y hacia el código C.
  • Código Python legible con rendimiento en lenguaje C.
  • Funciona de manera eficiente con grandes conjuntos de datos.
  • Crea aplicaciones rápidamente dentro del ecosistema CPython.

Conclusión

Eso es todo de este artículo. En este artículo, hemos discutido cómo podemos usar Cython para acelerar nuestro código Python y usar sus capacidades para mejorar el tiempo de ejecución del código. Puede practicar el código para una mejor práctica y hacer que su código se ejecute más rápido.

¡Gracias por leer!

Recent Post