uczę Cython i natknąłem się na to snippit kodu:Cython: bo od 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)
Oczywiście, to zwraca średnią który wynosi 2,5. Moje pytanie jest następujące:
Czy pętla for jest pętlą w języku Python, Cythonem lub C?
I tak niektóre naiwnych testy timeit i obie struktury pętli wydaje się działać w tym samym czasie z wielkości tablicy duże. Czy ktoś może to potwierdzić? Ciekawi mnie tylko, dlaczego autor tego konkretnego snippada zdecydował się na użycie starszej struktury we współczesnym kodzie. –
Powrót w dzień, Cython nie zoptymalizowałby 'for i in range (10)', więc faktycznie tworzyłby listę o długości 10 i iteruje nad nią za pomocą wywołań Pythona. Z tego powodu Pyrex/Cython wprowadził składnię ... z ..., która sprowadzałaby się do C. Czasami wciąż używam starszej składni, ponieważ jest bardziej jasne, że ten kod jest zoptymalizowany. – carl