%load_ext cythonmagic
%%cython -lcblas
import numpy as np
cdef extern:
double ddot_( int* N, double* X, int* INCX, double* Y, int* INCY ) nogil
cpdef double dot(double[:] a, double[:] b) nogil:
cdef int inc = 1
cdef int n = a.shape[0]
return ddot_(&n, &a[0], &inc, &b[0], &inc)
def main():
a = np.random.rand(100)
b = np.random.rand(100)
s = dot(a,b)
warning: /Users/noah/.ipython/cython/_cython_magic_31fdc41cb5785073c3693183243db8bf.pyx:10:23: Use boundscheck(False) for faster access warning: /Users/noah/.ipython/cython/_cython_magic_31fdc41cb5785073c3693183243db8bf.pyx:10:36: Use boundscheck(False) for faster access
a = np.random.rand(100)
b = np.random.rand(100)
%timeit dot(a,b)
%timeit np.dot(a,b)
100000 loops, best of 3: 4.03 µs per loop 1000000 loops, best of 3: 1.89 µs per loop