Beispiel #1
0
def get_Phi(grid, X_train, svd=False):
    def eval_op(x, op, size):
        result_vec = sg.DataVector(size)
        x = sg.DataVector(np.array(x).flatten())
        op.mult(x, result_vec)
        return result_vec.array().copy()

    def eval_op_transpose(x, op, size):
        result_vec = sg.DataVector(size)
        x = sg.DataVector(np.array(x).flatten())
        op.multTranspose(x, result_vec)
        return result_vec.array().copy()

    data_train = to_data_matrix(X_train)

    num_elem = X_train.shape[0]

    op = sg.createOperationMultipleEval(grid, data_train)
    matvec = lambda x: eval_op(x, op, num_elem)
    rmatvec = lambda x: eval_op_transpose(x, op, grid.getSize())

    shape = (num_elem, grid.getSize())
    linop = LinearOperator(shape, matvec, rmatvec, dtype='float64')

    if svd:
        k = min(grid.getSize(), X_train.shape[0])
        _, s, _ = svds(linop, k=k - 1)
        return s
    else:
        Phi = linop.matmat(np.matrix(np.identity(grid.getSize())))
        return Phi
Beispiel #2
0
def get_Phi(X_train):
    def eval_op(x, op, size):
        result_vec = sg.DataVector(size)
        x = sg.DataVector(np.array(x).flatten())
        op.mult(x, result_vec)
        return result_vec.array().copy()

    def eval_op_transpose(x, op, size):
        result_vec = sg.DataVector(size)
        x = sg.DataVector(np.array(x).flatten())
        op.multTranspose(x, result_vec)
        return result_vec.array().copy()

    num_elem = X_train.array().shape[0]
    
    grid = sg.Grid.createModLinearGrid(10)
    gen = grid.getGenerator()
    gen.regular(2)
    
    op = sg.createOperationMultipleEval(grid, X_train)
    matvec = lambda x: eval_op(x, op, num_elem)
    rmatvec = lambda x: eval_op_transpose(x, op, grid.getSize())

    shape = (num_elem, grid.getSize())
    linop = LinearOperator(shape, matvec, rmatvec, dtype='float64')

    Phi = linop.matmat(np.matrix(np.identity(grid.getSize())))
    return Phi