mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-18 13:55:14 +02:00
small changes to the lengthscales such that the periodic kernels can be called as the non-periodic ones
This commit is contained in:
parent
66f25769bc
commit
421b87a07c
3 changed files with 13 additions and 10 deletions
|
|
@ -21,13 +21,14 @@ class periodic_Matern32(kernpart):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
||||||
assert D==1
|
assert D==1, "Periodic kernels are only defined for D=1"
|
||||||
self.name = 'periodic_Mat32'
|
self.name = 'periodic_Mat32'
|
||||||
self.D = D
|
self.D = D
|
||||||
if lengthscale is not None:
|
if lengthscale is not None:
|
||||||
assert lengthscale.shape==(self.D,)
|
lengthscale = np.asarray(lengthscale)
|
||||||
|
assert lengthscale.size == 1, "Wrong size: only one lengthscale needed"
|
||||||
else:
|
else:
|
||||||
lengthscale = np.ones(self.D)
|
lengthscale = np.ones(1)
|
||||||
self.lower,self.upper = lower, upper
|
self.lower,self.upper = lower, upper
|
||||||
self.Nparam = 3
|
self.Nparam = 3
|
||||||
self.n_freq = n_freq
|
self.n_freq = n_freq
|
||||||
|
|
|
||||||
|
|
@ -21,13 +21,14 @@ class periodic_Matern52(kernpart):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
||||||
assert D==1
|
assert D==1, "Periodic kernels are only defined for D=1"
|
||||||
self.name = 'periodic_Mat52'
|
self.name = 'periodic_Mat52'
|
||||||
self.D = D
|
self.D = D
|
||||||
if lengthscale is not None:
|
if lengthscale is not None:
|
||||||
assert lengthscale.shape==(self.D,)
|
lengthscale = np.asarray(lengthscale)
|
||||||
|
assert lengthscale.size == 1, "Wrong size: only one lengthscale needed"
|
||||||
else:
|
else:
|
||||||
lengthscale = np.ones(self.D)
|
lengthscale = np.ones(1)
|
||||||
self.lower,self.upper = lower, upper
|
self.lower,self.upper = lower, upper
|
||||||
self.Nparam = 3
|
self.Nparam = 3
|
||||||
self.n_freq = n_freq
|
self.n_freq = n_freq
|
||||||
|
|
|
||||||
|
|
@ -21,13 +21,14 @@ class periodic_exponential(kernpart):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
def __init__(self,D=1,variance=1.,lengthscale=None,period=2*np.pi,n_freq=10,lower=0.,upper=4*np.pi):
|
||||||
assert D==1
|
assert D==1, "Periodic kernels are only defined for D=1"
|
||||||
self.name = 'periodic_exp'
|
self.name = 'periodic_exp'
|
||||||
self.D = D
|
self.D = D
|
||||||
if lengthscale is not None:
|
if lengthscale is not None:
|
||||||
assert lengthscale.shape==(self.D,)
|
lengthscale = np.asarray(lengthscale)
|
||||||
|
assert lengthscale.size == 1, "Wrong size: only one lengthscale needed"
|
||||||
else:
|
else:
|
||||||
lengthscale = np.ones(self.D)
|
lengthscale = np.ones(1)
|
||||||
self.lower,self.upper = lower, upper
|
self.lower,self.upper = lower, upper
|
||||||
self.Nparam = 3
|
self.Nparam = 3
|
||||||
self.n_freq = n_freq
|
self.n_freq = n_freq
|
||||||
|
|
@ -45,7 +46,7 @@ class periodic_exponential(kernpart):
|
||||||
r = np.sqrt(r1**2 + r2**2)
|
r = np.sqrt(r1**2 + r2**2)
|
||||||
psi = np.where(r1 != 0, (np.arctan(r2/r1) + (r1<0.)*np.pi),np.arcsin(r2))
|
psi = np.where(r1 != 0, (np.arctan(r2/r1) + (r1<0.)*np.pi),np.arcsin(r2))
|
||||||
return r,omega[:,0:1], psi
|
return r,omega[:,0:1], psi
|
||||||
|
|
||||||
def _int_computation(self,r1,omega1,phi1,r2,omega2,phi2):
|
def _int_computation(self,r1,omega1,phi1,r2,omega2,phi2):
|
||||||
Gint1 = 1./(omega1+omega2.T)*( np.sin((omega1+omega2.T)*self.upper+phi1+phi2.T) - np.sin((omega1+omega2.T)*self.lower+phi1+phi2.T)) + 1./(omega1-omega2.T)*( np.sin((omega1-omega2.T)*self.upper+phi1-phi2.T) - np.sin((omega1-omega2.T)*self.lower+phi1-phi2.T) )
|
Gint1 = 1./(omega1+omega2.T)*( np.sin((omega1+omega2.T)*self.upper+phi1+phi2.T) - np.sin((omega1+omega2.T)*self.lower+phi1+phi2.T)) + 1./(omega1-omega2.T)*( np.sin((omega1-omega2.T)*self.upper+phi1-phi2.T) - np.sin((omega1-omega2.T)*self.lower+phi1-phi2.T) )
|
||||||
Gint2 = 1./(omega1+omega2.T)*( np.sin((omega1+omega2.T)*self.upper+phi1+phi2.T) - np.sin((omega1+omega2.T)*self.lower+phi1+phi2.T)) + np.cos(phi1-phi2.T)*(self.upper-self.lower)
|
Gint2 = 1./(omega1+omega2.T)*( np.sin((omega1+omega2.T)*self.upper+phi1+phi2.T) - np.sin((omega1+omega2.T)*self.lower+phi1+phi2.T)) + np.cos(phi1-phi2.T)*(self.upper-self.lower)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue