From 52ab456bfe9ffea60f8509826f6edeb2366c9337 Mon Sep 17 00:00:00 2001 From: Max Zwiessele Date: Thu, 20 Feb 2014 14:09:20 +0000 Subject: [PATCH] posterior with one covariance per dimension and param gradient fix --- GPy/core/parameterization/param.py | 3 +++ GPy/inference/latent_function_inference/posterior.py | 7 +++++-- GPy/util/warping_functions.py | 3 +-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index c052099d..7ab7e2b4 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -86,6 +86,9 @@ class Param(ObservableArray, Constrainable, Gradcheckable, Indexable, Parentable if self._gradient_ is None: self._gradient_ = numpy.zeros(self._realshape_) return self._gradient_ + @gradient.setter + def gradient(self, val): + self.gradient[:] = val #=========================================================================== # Pickling operations diff --git a/GPy/inference/latent_function_inference/posterior.py b/GPy/inference/latent_function_inference/posterior.py index f28bf9d1..73741a13 100644 --- a/GPy/inference/latent_function_inference/posterior.py +++ b/GPy/inference/latent_function_inference/posterior.py @@ -81,13 +81,16 @@ class Posterior(object): def covariance(self): if self._covariance is None: #LiK, _ = dtrtrs(self.woodbury_chol, self._K, lower=1) - self._covariance = self._K - self._K.dot(self.woodbury_inv).dot(self._K) + self._covariance = np.tensordot(np.dot(np.atleast_3d(self.woodbury_inv).T, self._K), self._K, [1,0]).T + #self._covariance = self._K - self._K.dot(self.woodbury_inv).dot(self._K) return self._covariance @property def precision(self): if self._precision is None: - self._precision, _, _, _ = pdinv(self.covariance) + self._precision = np.zeros(np.atleast_3d(self.covariance).shape) # if one covariance per dimension + for p in xrange(self.covariance.shape[-1]): + self._precision[:,:,p] = pdinv(self.covariance[:,:,p])[0] return self._precision @property diff --git a/GPy/util/warping_functions.py b/GPy/util/warping_functions.py index 35ad3b80..a0a385e0 100644 --- a/GPy/util/warping_functions.py +++ b/GPy/util/warping_functions.py @@ -3,8 +3,6 @@ import numpy as np -import scipy as sp -import pylab as plt class WarpingFunction(object): """ @@ -39,6 +37,7 @@ class WarpingFunction(object): def plot(self, psi, xmin, xmax): y = np.arange(xmin, xmax, 0.01) f_y = self.f(y, psi) + from matplotlib import pyplot as plt plt.figure() plt.plot(y, f_y) plt.xlabel('y')