def cs_hdmr_expansion(inputs, outputs, basis_dict): print "Validating hierarchical orthogonality of basis:", sym_poly_utils.validate_sample_basis_ho(inputs, basis_dict) print "Validating normality of basis:", sym_poly_utils.validate_sample_basis_n(inputs, basis_dict) sensing_columns = [] basis_polys = [] basis_poly_syms = [] for syms, poly_list in basis_dict.items(): _, values = zip(*[(x.poly, x.vals) for x in poly_list]) values = list(values) sensing_columns += values basis_polys += poly_list basis_poly_syms += [syms]*len(poly_list) # Construct sensing matrix # astype fixes speed issue A = np.column_stack(sensing_columns).astype(float) # coeffs = basis_pursuit.l1m(A, outputs, e=0) coeffs = list(meridian_cs.mbcs(A, outputs, 0.1)) d = defaultdict(list) for syms, p, c in zip(basis_poly_syms, basis_polys, coeffs): d[syms] += [(p, c)] return BasisExpansion(d, inputs)
def cs_expansion_correlated(inputs, outputs, deg_cap=3, ord_cap=3): # Construct polynomial basis space = linalg.SampledPolynomialSpace(inputs, 2.0**inputs.shape[0]) print "Constructing basis..." # basis = linalg.get_basis(space, ord_cap, deg_cap) basis_dict = linalg.get_basis_qr(space, ord_cap, deg_cap) sensing_columns = [] basis_polys = [] zipped_basis = [] for syms, syms_zipped_basis in basis_dict.items(): polys, values = zip(*syms_zipped_basis) polys = list(polys) values = list(values) sensing_columns += values zipped_basis += syms_zipped_basis basis_polys += [(p, syms) for p in polys] print "done.\n" # Construct sensing matrix print "Constructing sensing matrix..." A = np.column_stack(sensing_columns) print "Solving for compressed coefficients..." # coeffs = basis_pursuit.l1m(A, outputs, e=0) coeffs = list(meridian_cs.mbcs(A, outputs, 0.1)) print "done.\n" return zip(zipped_basis, coeffs)