cython$ python test.py 0.0394711971283
Now the improvement achieves the 98% apropos of the first round. Let's take a look at the new HTML file in order to discern which parts of the code have been directly turned into pure C code.
From the previous picture, it can be asserted that apart from the two static types, a couple of critical structures have been also translated into C: the loops. Cython also provides another C-style syntax so as to write loops. The following file uses this kind of structure, but remember that will not produce any improvement because those loops have already been translated into C.
def calculate_primes(int limit): primes = [] cdef int number = 0 cdef int divisor = 0 for number from 2 <= number <= limit: for divisor from 2 <= divisor <= number: if number % divisor == 0 and number == divisor: primes.append(number) break elif number % divisor == 0 and number != divisor: break return primes
You can check the documentation located on the Cython website and learn lots of code structures provided by Cython. For example, if this method was embedded in the main script (not as an imported module), you might develop the next optimized method, where the function returns a pointer to an array, and that array has been defined as static and not as a Python list.
cdef int *calculate_primes(int limit): cdef int primes[10000] cdef int number = 0 cdef int divisor = 0 cdef int i = 0 for number from 2 <= number <= limit: for divisor from 2 <= divisor <= number: if number % divisor == 0 and number == divisor: primes[i] = number i += 1 break elif number % divisor == 0 and number != divisor: break return primes
Let's test out again the HTML file generated for this method.
No comments:
Post a Comment