mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-06-11 15:15:15 +02:00
minor changes
This commit is contained in:
parent
a99537d3cc
commit
f50fac8104
3 changed files with 19 additions and 18 deletions
|
|
@ -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])
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue