From 4f627c904fa5d008f308421ae5636336d0042d5f Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Tue, 13 May 2014 08:35:25 +0100 Subject: [PATCH] [variational] posterior object copies adjusted --- GPy/core/parameterization/param.py | 16 +++++++++++++--- GPy/core/parameterization/variational.py | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/GPy/core/parameterization/param.py b/GPy/core/parameterization/param.py index 3ccbd169..19e48d84 100644 --- a/GPy/core/parameterization/param.py +++ b/GPy/core/parameterization/param.py @@ -89,6 +89,13 @@ class Param(OptimizationHandlable, ObsAr): def param_array(self): return self + @property + def values(self): + """ + Return self as numpy array view + """ + return self.view(np.ndarray) + @property def gradient(self): """ @@ -99,11 +106,11 @@ class Param(OptimizationHandlable, ObsAr): """ if getattr(self, '_gradient_array_', None) is None: self._gradient_array_ = numpy.empty(self._realshape_, dtype=numpy.float64) - return self._gradient_array_[self._current_slice_] + return self._gradient_array_#[self._current_slice_] @gradient.setter def gradient(self, val): - self._gradient_array_[self._current_slice_] = val + self._gradient_array_[:] = val #=========================================================================== # Array operations -> done @@ -114,7 +121,10 @@ class Param(OptimizationHandlable, ObsAr): #if not reduce(lambda a, b: a or numpy.any(b is Ellipsis), s, False) and len(s) <= self.ndim: # s += (Ellipsis,) new_arr = super(Param, self).__getitem__(s, *args, **kwargs) - try: new_arr._current_slice_ = s; new_arr._original_ = self.base is new_arr.base + try: + new_arr._current_slice_ = s + new_arr._gradient_array_ = self.gradient[s] + new_arr._original_ = self.base is new_arr.base except AttributeError: pass # returning 0d array or float, double etc return new_arr diff --git a/GPy/core/parameterization/variational.py b/GPy/core/parameterization/variational.py index 3730baed..044d1592 100644 --- a/GPy/core/parameterization/variational.py +++ b/GPy/core/parameterization/variational.py @@ -100,6 +100,9 @@ class VariationalPosterior(Parameterized): n.__dict__.update(dc) n._parameters_[dc['mean']._parent_index_] = dc['mean'] n._parameters_[dc['variance']._parent_index_] = dc['variance'] + n._gradient_array_ = None + oversize = self.size - self.mean.size - self.variance.size + n.size = n.mean.size + n.variance.size + oversize n.ndim = n.mean.ndim n.shape = n.mean.shape n.num_data = n.mean.shape[0]