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
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