def _validate_basis(self, sample, basis): self.assertTrue( sym_poly_utils.validate_sample_basis_ho(sample, basis) ) self.assertTrue( sym_poly_utils.validate_sample_basis_n(sample, basis) )
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)