def bench_ball_tree(N=2000, D=3, k=15, leaf_size=30): print("Ball Tree") X = np.random.random((N, D)).astype(DTYPE) t0 = time() btskl = skBallTree(X, leaf_size=leaf_size) t1 = time() bt = BallTree(X, leaf_size=leaf_size) t2 = time() print("Build:") print(" sklearn : %.2g sec" % (t1 - t0)) print(" new : %.2g sec" % (t2 - t1)) t0 = time() Dskl, Iskl = btskl.query(X, k) t1 = time() dist = [Dskl] ind = [Iskl] times = [t1 - t0] labels = ['sklearn'] counts = [-1] for dualtree in (False, True): for breadth_first in (False, True): bt.reset_n_calls() t0 = time() D, I = bt.query(X, k, dualtree=dualtree, breadth_first=breadth_first) t1 = time() dist.append(D) ind.append(I) times.append(t1 - t0) counts.append(bt.get_n_calls()) if dualtree: label = 'dual/' else: label = 'single/' if breadth_first: label += 'breadthfirst' else: label += 'depthfirst' labels.append(label) print("Query:") for lab, t, c in zip(labels, times, counts): print(" %s : %.2g sec (%i calls)" % (lab, t, c)) print print( " distances match: %s" % ', '.join([ '%s' % np.allclose(dist[i - 1], dist[i]) for i in range(len(dist)) ])) print( " indices match: %s" % ', '.join( ['%s' % np.allclose(ind[i - 1], ind[i]) for i in range(len(ind))]))
def bench_ball_tree(N=2000, D=3, k=15, leaf_size=30): print("Ball Tree") X = np.random.random((N, D)).astype(DTYPE) t0 = time() btskl = skBallTree(X, leaf_size=leaf_size) t1 = time() bt = BallTree(X, leaf_size=leaf_size) t2 = time() print("Build:") print(" sklearn : %.2g sec" % (t1 - t0)) print(" new : %.2g sec" % (t2 - t1)) t0 = time() Dskl, Iskl = btskl.query(X, k) t1 = time() dist = [Dskl] ind = [Iskl] times = [t1 - t0] labels = ['sklearn'] counts = [-1] for dualtree in (False, True): for breadth_first in (False, True): bt.reset_n_calls() t0 = time() D, I = bt.query(X, k, dualtree=dualtree, breadth_first=breadth_first) t1 = time() dist.append(D) ind.append(I) times.append(t1 - t0) counts.append(bt.get_n_calls()) if dualtree: label = 'dual/' else: label = 'single/' if breadth_first: label += 'breadthfirst' else: label += 'depthfirst' labels.append(label) print("Query:") for lab, t, c in zip(labels, times, counts): print(" %s : %.2g sec (%i calls)" % (lab, t, c)) print print(" distances match: %s" % ', '.join(['%s' % np.allclose(dist[i - 1], dist[i]) for i in range(len(dist))])) print(" indices match: %s" % ', '.join(['%s' % np.allclose(ind[i - 1], ind[i]) for i in range(len(ind))]))
def bench_KDE(N=1000, D=3, h=0.5, leaf_size=30): X = np.random.random((N, D)) bt = BallTree(X, leaf_size=leaf_size) kernel = 'gaussian' print "Kernel Density:" atol = 1E-5 rtol = 1E-5 for h in [0.001, 0.01, 0.1]: t0 = time() dens_true = np.exp(-0.5 * ((X[:, None, :] - X) ** 2).sum(-1) / h ** 2).sum(-1) dens_true /= h * np.sqrt(2 * np.pi) t1 = time() bt.reset_n_calls() t2 = time() dens1 = bt.kernel_density(X, h, atol=atol, rtol=rtol, kernel=kernel, dualtree=False, breadth_first=True) t3 = time() n1 = bt.get_n_calls() bt.reset_n_calls() t4 = time() dens2 = bt.kernel_density(X, h, atol=atol, rtol=rtol, kernel=kernel, dualtree=False, breadth_first=False) t5 = time() n2 = bt.get_n_calls() bt.reset_n_calls() t6 = time() dens3 = bt.kernel_density(X, h, atol=atol, kernel=kernel, dualtree=True, breadth_first=True) t7 = time() n3 = bt.get_n_calls() bt.reset_n_calls() t8 = time() dens4 = bt.kernel_density(X, h, atol=atol, kernel=kernel, dualtree=True, breadth_first=False) t9 = time() n4 = bt.get_n_calls() print " h = %.3f" % h print " brute force: %.2g sec (%i calls)" % (t1 - t0, N * N) print(" single tree (depth first): %.2g sec (%i calls)" % (t3 - t2, n1)) print(" single tree (breadth first): %.2g sec (%i calls)" % (t5 - t4, n2)) print(" dual tree: (depth first) %.2g sec (%i calls)" % (t7 - t6, n3)) print(" dual tree: (breadth first) %.2g sec (%i calls)" % (t9 - t8, n4)) print " distances match:", (np.allclose(dens_true, dens1, atol=atol, rtol=rtol), np.allclose(dens_true, dens2, atol=atol, rtol=rtol), np.allclose(dens_true, dens3, atol=atol), np.allclose(dens_true, dens4, atol=atol))
def bench_KDE(N=1000, D=3, h=0.5, leaf_size=30): X = np.random.random((N, D)) bt = BallTree(X, leaf_size=leaf_size) kernel = 'gaussian' print "Kernel Density:" atol = 1E-5 rtol = 1E-5 for h in [0.001, 0.01, 0.1]: t0 = time() dens_true = np.exp(-0.5 * ((X[:, None, :] - X)**2).sum(-1) / h**2).sum(-1) dens_true /= h * np.sqrt(2 * np.pi) t1 = time() bt.reset_n_calls() t2 = time() dens1 = bt.kernel_density(X, h, atol=atol, rtol=rtol, kernel=kernel, dualtree=False, breadth_first=True) t3 = time() n1 = bt.get_n_calls() bt.reset_n_calls() t4 = time() dens2 = bt.kernel_density(X, h, atol=atol, rtol=rtol, kernel=kernel, dualtree=False, breadth_first=False) t5 = time() n2 = bt.get_n_calls() bt.reset_n_calls() t6 = time() dens3 = bt.kernel_density(X, h, atol=atol, kernel=kernel, dualtree=True, breadth_first=True) t7 = time() n3 = bt.get_n_calls() bt.reset_n_calls() t8 = time() dens4 = bt.kernel_density(X, h, atol=atol, kernel=kernel, dualtree=True, breadth_first=False) t9 = time() n4 = bt.get_n_calls() print " h = %.3f" % h print " brute force: %.2g sec (%i calls)" % (t1 - t0, N * N) print(" single tree (depth first): %.2g sec (%i calls)" % (t3 - t2, n1)) print(" single tree (breadth first): %.2g sec (%i calls)" % (t5 - t4, n2)) print(" dual tree: (depth first) %.2g sec (%i calls)" % (t7 - t6, n3)) print(" dual tree: (breadth first) %.2g sec (%i calls)" % (t9 - t8, n4)) print " distances match:", (np.allclose(dens_true, dens1, atol=atol, rtol=rtol), np.allclose(dens_true, dens2, atol=atol, rtol=rtol), np.allclose(dens_true, dens3, atol=atol), np.allclose(dens_true, dens4, atol=atol))