In [ ]:
import numpy as np
N = 1000000
A = np.random.rand(N)
In [ ]:
def mean_plain(A, N):
sum = 0.0
j = 0
while j < N:
sum += A[j]
j+=1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_plain(A, N)
In [ ]:
%load_ext Cython
In [ ]:
%%cython
cimport numpy as np
def mean_cython1(A, N):
sum = 0.0
j = 0
while j < N:
sum += A[j]
j+=1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_cython1(A, N)
In [ ]:
%%cython
def mean_cython2(A, int N):
cdef double sum = 0.0
cdef int j = 0
while j < N:
sum += A[j]
j += 1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_cython2(A, N)
In [ ]:
%%cython
cimport numpy as np
def mean_cython3(np.ndarray[np.float64_t, ndim=1] A, int N):
cdef double sum = 0.0
cdef int j = 0
while j < N:
sum += A[j]
j += 1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_cython3(A, N)
In [ ]:
%%cython
cimport numpy as np
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
def mean_cython4(np.ndarray[np.float64_t, ndim=1, mode="c"] A, int N):
cdef double sum = 0.0
cdef int j = 0
while j < N:
sum += A[j]
j += 1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_cython4(A, N)
In [ ]:
%%cython
cimport numpy as np
cimport cython
@cython.boundscheck(False)
@cython.wraparound(False)
def mean_cython5(np.ndarray[np.float64_t, ndim=1, mode="c"] A, int N):
cdef double sum = 0.0
cdef int j = 0
with nogil:
while j < N:
sum += A[j]
j += 1
return sum / N
In [ ]:
%%timeit -n 1 -r 1
mean_cython5(A, N)