From f50fac810418a8d56e2ecf1729f6eca14f346f0e Mon Sep 17 00:00:00 2001 From: Ricardo Date: Mon, 3 Feb 2014 15:29:06 +0000 Subject: [PATCH] minor changes --- GPy/kern/constructors.py | 8 ++++---- GPy/kern/kern.py | 4 ++-- GPy/kern/parts/prod.py | 25 +++++++++++++------------ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/GPy/kern/constructors.py b/GPy/kern/constructors.py index 11da5e9b..a362aff8 100644 --- a/GPy/kern/constructors.py +++ b/GPy/kern/constructors.py @@ -411,7 +411,7 @@ def periodic_Matern52(input_dim, variance=1., lengthscale=None, period=2 * np.pi part = parts.periodic_Matern52.PeriodicMatern52(input_dim, variance, lengthscale, period, n_freq, lower, upper) return kern(input_dim, [part]) -def prod(k1,k2,tensor=False): +def prod(k1,k2,**kwargs): """ Construct a product kernel over input_dim from two kernels over input_dim @@ -422,7 +422,7 @@ def prod(k1,k2,tensor=False): :rtype: kernel object """ - part = parts.prod.Prod(k1, k2, tensor) + part = parts.prod.Prod(k1, k2, **kwargs) return kern(part.input_dim, [part]) def symmetric(k): @@ -433,7 +433,7 @@ def symmetric(k): k_.parts = [symmetric.Symmetric(p) for p in k.parts] return k_ -def coregionalize(output_dim,rank=1, W=None, kappa=None): +def coregionalize(output_dim,rank=1, W=None, kappa=None,name='coregion'): """ Coregionlization matrix B, of the form: @@ -458,7 +458,7 @@ def coregionalize(output_dim,rank=1, W=None, kappa=None): :rtype: kernel object """ - p = parts.coregionalize.Coregionalize(output_dim,rank,W,kappa) + p = parts.coregionalize.Coregionalize(output_dim,rank,W,kappa,name) return kern(1,[p]) diff --git a/GPy/kern/kern.py b/GPy/kern/kern.py index de87ff14..6c24ab7d 100644 --- a/GPy/kern/kern.py +++ b/GPy/kern/kern.py @@ -170,7 +170,7 @@ class kern(Parameterized): """ return self.prod(other, tensor=True) - def prod(self, other, tensor=False): + def prod(self, other, tensor=False, **kwargs): """ Multiply two kernels (either on the same space, or on the tensor product of the input space). @@ -189,7 +189,7 @@ class kern(Parameterized): s1[sl1], s2[sl2] = [True], [True] slices += [s1 + s2] - newkernparts = [prod(k1, k2, tensor) for k1, k2 in itertools.product(K1._parameters_, K2._parameters_)] + newkernparts = [prod(k1, k2, tensor, **kwargs) for k1, k2 in itertools.product(K1._parameters_, K2._parameters_)] if tensor: newkern = kern(K1.input_dim + K2.input_dim, newkernparts, slices) diff --git a/GPy/kern/parts/prod.py b/GPy/kern/parts/prod.py index 2569c51c..3e624756 100644 --- a/GPy/kern/parts/prod.py +++ b/GPy/kern/parts/prod.py @@ -17,21 +17,21 @@ class Prod(Kernpart): :rtype: kernel object """ - def __init__(self,k1,k2,tensor=False): + def __init__(self,k1,k2,tensor=False,name="product"): if tensor: - super(Prod, self).__init__(k1.input_dim + k2.input_dim, '['+k1.name + '**' + k2.name +']') + super(Prod, self).__init__(k1.input_dim + k2.input_dim, name) else: assert k1.input_dim == k2.input_dim, "Error: The input spaces of the kernels to sum don't have the same dimension." - super(Prod, self).__init__(k1.input_dim, '['+k1.name + '*' + k2.name +']') + super(Prod, self).__init__(k1.input_dim, name) #self.num_params = k1.num_params + k2.num_params self.k1 = k1 self.k2 = k2 -# if tensor: -# self.slice1 = slice(0,self.k1.input_dim) -# self.slice2 = slice(self.k1.input_dim,self.k1.input_dim+self.k2.input_dim) -# else: -# self.slice1 = slice(0,self.input_dim) -# self.slice2 = slice(0,self.input_dim) + if tensor: + self.slice1 = slice(0,self.k1.input_dim) + self.slice2 = slice(self.k1.input_dim,self.k1.input_dim+self.k2.input_dim) + else: + self.slice1 = slice(0,self.input_dim) + self.slice2 = slice(0,self.input_dim) self._X, self._X2 = np.empty(shape=(2,1)) self.add_parameters(self.k1, self.k2) @@ -117,18 +117,19 @@ class Prod(Kernpart): def _K_computations(self,X,X2): if not (np.array_equal(X,self._X) and np.array_equal(X2,self._X2) and np.array_equal(self._params , self._get_params())): - self._X = X.copy() - self._params == self._get_params().copy() + #self._X = X.copy() + #self._params == self._get_params().copy() if X2 is None: self._X2 = None self._K1 = np.zeros((X.shape[0],X.shape[0])) self._K2 = np.zeros((X.shape[0],X.shape[0])) self.k1.K(X[:,self.slice1],None,self._K1) self.k2.K(X[:,self.slice2],None,self._K2) + #self.k1.K(X[:,self.k1.input_slices],None,self._K1) + #self.k2.K(X[:,self.k2_input_slices],None,self._K2) else: self._X2 = X2.copy() self._K1 = np.zeros((X.shape[0],X2.shape[0])) self._K2 = np.zeros((X.shape[0],X2.shape[0])) self.k1.K(X[:,self.slice1],X2[:,self.slice1],self._K1) self.k2.K(X[:,self.slice2],X2[:,self.slice2],self._K2) -