In [1]:
%load_ext Cython
In [4]:
%%cython
def summer1(double[:] mv):
"""Sums its argument's contents."""
cdef double d, ss=0.0
for d in mv:
ss += d
return ss
In [5]:
import numpy as np
arr = np.ones((10**6,), dtype=np.double)
In [7]:
%timeit -n3 -r3 summer1(arr)
In [9]:
from array import array
ar = array('d', [1]*10**6)
In [10]:
%timeit -n3 -r3 summer1(ar)
In [26]:
%%cython
def summer2(double[:] mv):
"""Sums its argument's contents."""
cdef:
double ss=0.0
int i, N
N = mv.shape[0]
for i in range(N):
ss += mv[i]
return ss
In [29]:
%timeit -n3 -r3 summer2(arr)
In [28]:
%timeit -n3 -r3 summer2(ar)
In [73]:
%%cython
from cython cimport wraparound, boundscheck
@boundscheck(False)
@wraparound(False)
cpdef double summer3(double[:] mv):
"""Sums its argument's contents."""
cdef:
double ss=0.0
int i, N
N = mv.shape[0]
for i in range(N):
ss += mv[i]
return ss
In [74]:
%timeit -n3 -r3 summer3(arr)
In [75]:
%timeit -n3 -r3 arr.sum()