예제 #1
0
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))]))
예제 #2
0
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))]))
예제 #3
0
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))
예제 #4
0
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))