def BTdot(self, uin): """Compute B^T.uin as a np.array uin must be a np.array""" isarray(uin) u = Function(self.V) out = u.vector() for ii, bb in enumerate(self.B): out += bb*uin[ii] return out.array()
def apply_noise(self, uin): """Apply Gaussian noise to np.array of data. noisepercent = 0.02 => 2% noise level, i.e., || u - ud || / || ud || = || noise || / || ud || = 0.02""" isarray(uin) noisevect = randn(len(uin)) # Get norm of entire random vector: if self.mycomm == None: normrand = norm(noisevect) else: normrand = sqrt(MPI.sum(self.mycomm, norm(noisevect)**2)) noisevect /= normrand # Get norm of entire vector ud (not just local part): if self.mycomm == None: normud = norm(uin) else: normud = sqrt(MPI.sum(self.mycomm, norm(uin)**2)) noisevect *= self.noisepercent * normud objnoise_glob = (self.noisepercent * normud)**2 UDnoise = uin + noisevect return UDnoise, objnoise_glob
def BTdotvec(self, uin, outvect): """ Compute B^T.uin """ isarray(uin) outvect.zero() for ii, bb in enumerate(self.B): outvect += bb*uin[ii]