コード例 #1
0
def compute_hyperbolic_level_indices(num_dims, level, p=1.0):

    if level == 0:
        return numpy.zeros((num_dims), numpy.int32)

    indices = []
    for d in xrange(num_dims):
        index = numpy.zeros((num_dims), numpy.int32)
        index[d] = level
        indices.append(index)

    for d in xrange(2, min(level + 1, num_dims + 1)):

        level_comb = compute_hyperbolic_level_subdim_indices(num_dims, level, d, p)

        if level_comb.shape[0] == 0:
            break

        dim_indices = []
        dims_comb = compute_combinations(num_dims, d)
        for i in xrange(dims_comb.shape[0]):
            if numpy.count_nonzero(dims_comb[i, :]) == d:
                dim_indices.append(dims_comb[i, :])

        for dim_index in dim_indices:
            I = numpy.nonzero(dim_index)
            for level_index in level_comb:
                index = numpy.zeros((num_dims), numpy.int32)
                index[I] = level_index
                indices.append(index)

    return numpy.asarray(indices)
コード例 #2
0
    level = 3
    print compute_combinations(num_dims, level)

    num_dims = 3
    level = 2
    print compute_combinations(num_dims, level)

    num_dims = 2
    level = 4
    p = 0.5
    print compute_hyperbolic_indices(num_dims, level, p)

    num_dims = 3
    level = 5
    p = 0.5
    print "a", compute_hyperbolic_level_subdim_indices(num_dims, level, 2, p)
    from math_tools_cpp import compute_hyperbolic_level_subdim_indices as compute_hyperbolic_level_subdim_indices_cpp

    print "b", compute_hyperbolic_level_subdim_indices_cpp(num_dims, level, 2, p)

    num_dims = 10
    level = 9
    p = 0.4
    import time

    t0 = time.time()
    indices = compute_hyperbolic_indices(num_dims, level, p)
    numpy.set_printoptions(threshold=numpy.nan)
    print indices.shape
    from utilities.math_utils import unique_matrix_rows