def test_manual_vectorization(self): x = linspace(-5, 5, 1001) t = Translate(sinc) t.translate() vsinc0 = t.make_ufunc() y = vsinc0(x) self.assertTrue((y == array([sinc(x_elem) for x_elem in x])).all())
def test_manual_vectorization(self): x = linspace(-5,5,1001) t = Translate(sinc) t.translate() vsinc0 = t.make_ufunc() y = vsinc0(x) self.assertTrue((y == array([sinc(x_elem) for x_elem in x])).all())
def numba_reconstruct(md, func, otype=LLVM): ret_type, arg_types = md tr = Translate(func, ret_type, arg_types) tr.translate() if otype == LLVM: return tr.get_ctypes_func(llvm=True) elif otype == UFUNC: return tr.make_ufunc(llvm=True) elif otype == GUFUNC: pass else: raise Exception("Unknown numba cast")
from math import sin, pi from numba.decorators import vectorize #@vectorize def sinc(x): if x==0.0: return 1.0 else: return sin(x*pi)/(pi*x) from numba.translate import Translate t = Translate(sinc) t.translate() print t.mod res = t.make_ufunc() sinc = vectorize(sinc) from numpy import linspace print res(linspace(-5,5,50))
from math import sin, pi from numba.decorators import vectorize #@vectorize def sinc(x): if x==0.0: return 1.0 else: return sin(x*pi)/(pi*x) from numba.translate import Translate t = Translate(sinc) t.translate() print t.mod sinc = t.make_ufunc() #sinc = vectorize(sinc) from numpy import linspace x = linspace(-5,5,1001) y = sinc(x) from pylab import plot, show plot(x,y) show()
# Fortran: t = timeit.Timer(lambda : f2py_arc_distance.arc_distance(np_a, np_b)) print "Cython Implementation: %.5f " % (t.timeit(5)) cy_c = cython_arc_distance.arc_distance(np_a, np_b) t = timeit.Timer(lambda : arc_distance_numexpr(np_a, np_b)) print "Numexpr Implementation: %.5f " % (t.timeit(5)) ne_c = arc_distance_numexpr(np_a, np_b) for i in range(np_c.shape[0]): for j in range(np_c.shape[1]): assertAlmostEqual(cy_c[i,j],np_c[i,j]) ## Doesn't work yet. t = Translate(arc_distance_numba) numba_arc_distance = t.make_ufunc() x = time.time() for I in range(3): if (len(a.shape) != 2) or (a.shape[1] != 2): raise ValueError('a should be Nx2') if (len(b.shape) != 2) or (b.shape[1] != 2): raise ValueError('b should be Nx2') # Check for two dimensional arrays theta_1 = np.tile(a[:,0],(b.shape[0],1)).T phi_1 = np.tile(a[:,1],(b.shape[0],1)).T theta_2 = np.tile(b[:,0],(a.shape[0],1)) phi_2 = np.tile(b[:,1],(a.shape[0],1))