In [1]:
%load_ext Cython

In [2]:
def smooth_py(a):
    n = len(a) - 1
    for i in range(1, n):
        a[i] = (a[i-1] + a[i] + a[i+1]) / 3.0
    return a

In [3]:
%%cython
def smooth_c1(a):
    cdef unsigned int i, n=len(a) - 1
    for i in range(1, n):
        a[i] = (a[i-1] + a[i] + a[i+1]) / 3.0
    return a

In [13]:
%%cython
cdef list smooth_c2(list a):
    cdef unsigned int i, n=len(a) - 1
    for i in range(1, n):
        a[i] = (a[i-1] + a[i] + a[i+1]) / 3.0
    return a

In [4]:
from random import sample

In [24]:
a = sample(range(1000), k=1000)

In [25]:
%timeit -n3 -r5 smooth_py(a[:])


3 loops, best of 5: 563 µs per loop

In [26]:
%timeit -n3 -r5 smooth_c1(a[:])


3 loops, best of 5: 96.2 µs per loop

In [27]:
%timeit -n3 -r5 smooth_c2(a[:])


3 loops, best of 5: 97.7 µs per loop