estoy aprendiendo Cython y encontré este snippit de código:Cython: para i de 1 <= i <N
import numpy as np
cimport numpy as np
def mean(np.ndarray[np.double_t] input):
cdef np.double_t cur
# Py_ssize_t is numpy's index type
cdef Py_ssize_t i
cdef Py_ssize_t N = len(input)
for i from 0 <= i < N:
cur += input[i]
return cur/N
a=np.array([1,2,3,4], dtype=np.double)
Obviamente, esto devuelve la media de un que es 2,5. Mi pregunta es la siguiente:
¿El bucle for es un bucle Python, Cython o C?
Hice algunas pruebas TimeIt ingenuos y dos estructuras de bucle parecen funcionar en aproximadamente la misma cantidad de tiempo con gran tamaño de la matriz. ¿Alguien puede confirmar esto? Solo tengo curiosidad de por qué el autor de este snippit particular eligió usar la estructura anterior en el código moderno. –
En el pasado, Cython no optimizaba 'for i in range (10)', por lo que crearía una lista de longitud 10 e iteraría sobre ella utilizando las llamadas de devolución de Python. Debido a esto, Pyrex/Cython introdujo la sintaxis de ... de ..., que se reduciría a C. A veces sigo usando la sintaxis anterior porque es más claro que este código está optimizado. – carl