minor changes

This commit is contained in:
Ricardo 2014-02-03 15:29:06 +00:00
parent a99537d3cc
commit f50fac8104
3 changed files with 19 additions and 18 deletions

View file

@ -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])

View file

@ -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)

View file

@ -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)