Merge branch 'master' of github.com:SheffieldML/GPy

This commit is contained in:
James Hensman 2012-12-17 11:52:20 +00:00
commit 304947d6cd

View file

@ -199,23 +199,6 @@ class spkern(kernpart):
%s %s
"""%(gradient_funcs,"/*"+str(self._sp_k)+"*/") #adding a string representation forces recompile when needed """%(gradient_funcs,"/*"+str(self._sp_k)+"*/") #adding a string representation forces recompile when needed
#Here's some code to do gradients wrt z (should be the same as for X, but this is easier
gradient_funcs_Z = "\n".join(["target[j*D+%i] += partial[i*M+j]*dk_dz%i(%s);"%(q,q,arglist) for q in range(self.D)])
self._dK_dZ_code = \
"""
int i;
int j;
int N = partial_array->dimensions[0];
int M = partial_array->dimensions[1];
int D = X_array->dimensions[1];
for (i=0;i<N; i++){
for (j=0; j<M; j++){
%s
}
}
%s
"""%(gradient_funcs_Z,"/*"+str(self._sp_k)+"*/") #adding a string representation forces recompile when needed
#now for gradients of Kdiag wrt X #now for gradients of Kdiag wrt X
self._dKdiag_dX_code= \ self._dKdiag_dX_code= \
""" """
@ -238,42 +221,28 @@ class spkern(kernpart):
def K(self,X,Z,target): def K(self,X,Z,target):
param = self._param param = self._param
weave.inline(self._K_code,arg_names=['target','X','Z','param'],**self.weave_kwargs) weave.inline(self._K_code,arg_names=['target','X','Z','param'],**self.weave_kwargs)
return target
def Kdiag(self,X,target): def Kdiag(self,X,target):
param = self._param param = self._param
weave.inline(self._Kdiag_code,arg_names=['target','X','param'],**self.weave_kwargs) weave.inline(self._Kdiag_code,arg_names=['target','X','param'],**self.weave_kwargs)
return target
def dK_dtheta(self,partial,X,Z,target): def dK_dtheta(self,partial,X,Z,target):
param = self._param param = self._param
weave.inline(self._dK_dtheta_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs) weave.inline(self._dK_dtheta_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs)
return target
def dKdiag_dtheta(self,partial,X,target): def dKdiag_dtheta(self,partial,X,target):
param = self._param param = self._param
Z = X Z = X
weave.inline(self._dKdiag_dtheta_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs) weave.inline(self._dKdiag_dtheta_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs)
return target
def dK_dX(self,partial,X,Z,target): def dK_dX(self,partial,X,Z,target):
target = np.zeros_like(X)
param = self._param param = self._param
weave.inline(self._dK_dX_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs) weave.inline(self._dK_dX_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs)
return target
#def dK_dZ(self,X,Z,partial=None):
##TODO: this function might not be necessary
#target = np.zeros_like(Z)
#param = self._param
#weave.inline(self._dK_dZ_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs)
#return target
def dKdiag_dX(self,partial,X,target): def dKdiag_dX(self,partial,X,target):
param = self._param param = self._param
Z = X Z = X
weave.inline(self._dKdiag_dX_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs) weave.inline(self._dKdiag_dX_code,arg_names=['target','X','Z','param','partial'],**self.weave_kwargs)
return target
def set_param(self,param): def set_param(self,param):
#print param.flags['C_CONTIGUOUS'] #print param.flags['C_CONTIGUOUS']