示例#1
0
def benchmark_maxradius():
    print(" ndim |  npts | duration")
    for ndim in 2, 4, 8, 16, 32, 64:
        plotpoints = []
        np.random.seed(ndim)
        for npts in 100, 400, 1000, 4000:
            points = np.random.uniform(size=(npts, ndim))
            transformLayer = ScalingLayer()
            region = MLFriends(points, transformLayer)

            niter = 0
            total_duration = 0
            while total_duration < 1:
                start = time.time()
                maxr = region.compute_maxradiussq(nbootstraps=20)
                total_duration += time.time() - start
                niter += 1
            print('%5d | %5d | %.2fms  val=%f' %
                  (ndim, npts, total_duration * 1000 / niter, maxr))
            plotpoints.append((npts, total_duration * 1000 / niter / npts**2))
        plt.plot(*zip(*plotpoints), label='ndim=%d' % ndim)

    plt.xlabel('Number of live points')
    plt.ylabel('Duration [ms] / nlive$^2$')
    plt.yscale('log')
    plt.xscale('log')
    plt.legend(loc='best', prop=dict(size=10))
    plt.savefig('testmaxradius.pdf', bbox_inches='tight')
    plt.close()
示例#2
0
def test_clusteringcase_eggbox():
    from ultranest.mlfriends import update_clusters, ScalingLayer, MLFriends
    points = np.loadtxt(os.path.join(here, "eggboxregion.txt"))
    transformLayer = ScalingLayer()
    transformLayer.optimize(points, points)
    region = MLFriends(points, transformLayer)
    maxr = region.compute_maxradiussq(nbootstraps=30)
    assert 1e-10 < maxr < 5e-10
    print('maxradius:', maxr)
    nclusters, clusteridxs, overlapped_points = update_clusters(
        points, points, maxr)
    # plt.title('nclusters: %d' % nclusters)
    # for i in np.unique(clusteridxs):
    #    x, y = points[clusteridxs == i].transpose()
    #    plt.scatter(x, y)
    # plt.savefig('testclustering_eggbox.pdf', bbox_inches='tight')
    # plt.close()
    assert 14 < nclusters < 20, nclusters
示例#3
0
def test_overclustering_eggbox_txt():
    from ultranest.mlfriends import update_clusters, ScalingLayer, MLFriends
    np.random.seed(1)
    for i in [20, 23, 24, 27, 49]:
        print()
        print("==== TEST CASE %d =====================" % i)
        print()
        points = np.loadtxt(os.path.join(here, "overclustered_u_%d.txt" % i))

        for k in range(3):
            transformLayer = ScalingLayer(wrapped_dims=[])
            transformLayer.optimize(points, points)
            region = MLFriends(points, transformLayer)
            maxr = region.compute_maxradiussq(nbootstraps=30)
            region.maxradiussq = maxr
            nclusters = transformLayer.nclusters

            print("manual: r=%e nc=%d" % (region.maxradiussq, nclusters))
            # assert 1e-10 < maxr < 5e-10
            nclusters, clusteridxs, overlapped_points = update_clusters(
                points, points, maxr)
            print("reclustered: nc=%d" % (nclusters))

        if False:
            plt.title('nclusters: %d' % nclusters)
            for k in np.unique(clusteridxs):
                x, y = points[clusteridxs == k].transpose()
                plt.scatter(x, y)
            plt.savefig('testoverclustering_eggbox_%d.pdf' % i,
                        bbox_inches='tight')
            plt.close()
        assert 14 < nclusters < 20, (nclusters, i)

        for j in range(3):
            nclusters, clusteridxs, overlapped_points = update_clusters(
                points, points, maxr)
            assert 14 < nclusters < 20, (nclusters, i)