def multivariate_norm_log_pdf(self,x,mu,cov): # -0.5 * (dot(x-mu,dot(inv(cov),x-mu)) + len(x)*log(2*pi) + log(det(cov))) self.vec_d_y[:] = x self.vec_d_y[:] -= mu solve(cov,reshape(self.vec_d_y,(-1,1)),reshape(self.vec_d_y2,(-1,1)), self.covf,self.colvecf,self.pivotscov) ret = dot(self.vec_d_y,self.vec_d_y2) ret += len(x)*log(2*pi) lu(cov,self.pcov,self.Lcov,self.Ucov,self.covf,self.pivotscov) getdiag(self.Ucov,self.vec_d_y) absolute(self.vec_d_y,self.vec_d_y2) log(self.vec_d_y2,self.vec_d_y) ret += sum(self.vec_d_y) ret *= -0.5 return ret
def multivariate_norm_log_pdf(self, x, mu, cov): # -0.5 * (dot(x-mu,dot(inv(cov),x-mu)) + len(x)*log(2*pi) + log(det(cov))) self.vec_d_y[:] = x self.vec_d_y[:] -= mu solve(cov, reshape(self.vec_d_y, (-1, 1)), reshape(self.vec_d_y2, (-1, 1)), self.covf, self.colvecf, self.pivotscov) ret = dot(self.vec_d_y, self.vec_d_y2) ret += len(x) * log(2 * pi) lu(cov, self.pcov, self.Lcov, self.Ucov, self.covf, self.pivotscov) getdiag(self.Ucov, self.vec_d_y) absolute(self.vec_d_y, self.vec_d_y2) log(self.vec_d_y2, self.vec_d_y) ret += sum(self.vec_d_y) ret *= -0.5 return ret
def multivariate_norm_log_pdf(self,x,mu,cov): #return -0.5 * (dot(x-mu,dot(inv(cov),x-mu)) + len(x)*log(2*pi) + sum(log(eigvals(cov)))) #return_old = -0.5 * (dot(x-mu,solve(cov,x-mu)) + len(x)*log(2*pi) + sum(log(abs(diag(scipy.linalg.lu(cov)[2]))))) self.vec_d_y[:] = x self.vec_d_y[:] -= mu solve(cov,reshape(self.vec_d_y,(-1,1)),reshape(self.vec_d_y2,(-1,1)), self.covf,self.colvecf,self.pivotscov) ret = dot(self.vec_d_y,self.vec_d_y2) ret += len(x)*log(2*pi) lu(cov,self.pcov,self.Lcov,self.Ucov,self.covf,self.pivotscov) getdiag(self.Ucov,self.vec_d_y) absolute(self.vec_d_y,self.vec_d_y2) log(self.vec_d_y2,self.vec_d_y) ret += sum(self.vec_d_y) ret *= -0.5 return ret
def multivariate_norm_log_pdf(self, x, mu, cov): #return -0.5 * (dot(x-mu,dot(inv(cov),x-mu)) + len(x)*log(2*pi) + sum(log(eigvals(cov)))) #return_old = -0.5 * (dot(x-mu,solve(cov,x-mu)) + len(x)*log(2*pi) + sum(log(abs(diag(scipy.linalg.lu(cov)[2]))))) self.vec_d_y[:] = x self.vec_d_y[:] -= mu solve(cov, reshape(self.vec_d_y, (-1, 1)), reshape(self.vec_d_y2, (-1, 1)), self.covf, self.colvecf, self.pivotscov) ret = dot(self.vec_d_y, self.vec_d_y2) ret += len(x) * log(2 * pi) lu(cov, self.pcov, self.Lcov, self.Ucov, self.covf, self.pivotscov) getdiag(self.Ucov, self.vec_d_y) absolute(self.vec_d_y, self.vec_d_y2) log(self.vec_d_y2, self.vec_d_y) ret += sum(self.vec_d_y) ret *= -0.5 return ret