Cython Demo - Sage Days 22

589 days ago by robertwb

%python def is_prime0(n): if n == 2: return True if n % 2 == 0 or n < 2: return False k = 3 while k*k <= n: if n % k == 0: return False k += 2 return True 
       
L = list(primes(10000)) timeit("[is_prime0(p) for p in L]") 
       
5 loops, best of 3: 167 ms per loop
5 loops, best of 3: 167 ms per loop
%cython def is_prime1(n): if n == 2: return True if n % 2 == 0 or n < 2: return False k = 3 while k*k <= n: if n % k == 0: return False k += 2 return True 
timeit("[is_prime1(p) for p in L]") 
       
5 loops, best of 3: 156 ms per loop
5 loops, best of 3: 156 ms per loop
%cython import cython @cython.locals(n=int, k=int) def is_prime2(n): if n == 2: return True if n % 2 == 0 or n < 2: return False k = 3 while k*k <= n: if n % k == 0: return False k += 2 return True 
timeit("[is_prime2(p) for p in L]") 
       
625 loops, best of 3: 568 µs per loop
625 loops, best of 3: 568 µs per loop
173 / .568 
       
304.577464788732
304.577464788732
%cython import cython cdef bint is_prime3(int n): if n == 2: return True if n % 2 == 0 or n < 2: return False cdef int k = 3 while k*k <= n: if n % k == 0: return False k += 2 return True def is_prime_list(L): return [is_prime3(p) for p in L] 
timeit("is_prime_list(L)") 
       
625 loops, best of 3: 447 µs per loop
625 loops, best of 3: 447 µs per loop
%cython import cython from numpy cimport ndarray cdef bint is_prime3(int n): if n == 2: return True if n % 2 == 0 or n < 2: return False cdef int k = 3 while k*k <= n: if n % k == 0: return False k += 2 return True def is_prime_array(ndarray[int, ndim=1] L): cdef ndarray[int, ndim=1] res = ndarray(shape=(L.shape[0],), dtype=int) cdef int i for i in range(L.shape[0]): res[i] = is_prime3(L[i]) return res 
import numpy npL = numpy.array(L) timeit("is_prime_array(npL)") 
       
625 loops, best of 3: 346 µs per loop
625 loops, best of 3: 346 µs per loop