import math import random import numpy as np from numba import jit, vectorize, float64 import matplotlib.pyplot as plt import seaborn %matplotlib inline def step(): return 1. if random.random() > .5 else -1. def walk(n): x = np.zeros(n) dx = 1. / n for i in range(n - 1): x_new = x[i] + dx * step() if x_new > 5e-3: x[i + 1] = 0. else: x[i + 1] = x_new return x n = 100000 x = walk(n) plt.plot(x) %%timeit walk(n) @jit(nopython=True) def step_numba(): return 1. if random.random() > .5 else -1. @jit(nopython=True) def walk_numba(n): x = np.zeros(n) dx = 1. / n for i in range(n - 1): x_new = x[i] + dx * step_numba() if x_new > 5e-3: x[i + 1] = 0. else: x[i + 1] = x_new return x %%timeit walk_numba(n) x = np.random.rand(10000000) %timeit np.cos(2*x**2 + 3*x + 4*np.exp(x**3)) @vectorize def kernel(x): return np.cos(2*x**2 + 3*x + 4*np.exp(x**3)) kernel(1.) %timeit kernel(x) import numexpr %timeit numexpr.evaluate('cos(2*x**2 + 3*x + 4*exp(x**3))') numexpr.detect_number_of_cores()