From 6119c3307865c88f40cc1db9c831e7ccbd52d1e2 Mon Sep 17 00:00:00 2001 From: Zhenwen Dai Date: Tue, 3 Jun 2014 11:34:32 +0100 Subject: [PATCH] Support non-symmetric dL_dKmm for stationary kernel --- GPy/kern/_src/stationary.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/GPy/kern/_src/stationary.py b/GPy/kern/_src/stationary.py index ef8900f9..055a945e 100644 --- a/GPy/kern/_src/stationary.py +++ b/GPy/kern/_src/stationary.py @@ -168,11 +168,14 @@ class Stationary(Kern): #the lower memory way with a loop tmp = invdist*dL_dr - if X2 is None: - tmp *= 2. - X2 = X ret = np.empty(X.shape, dtype=np.float64) - [np.einsum('ij,ij->i', tmp, X[:,q][:,None]-X2[:,q][None,:], out=ret[:,q]) for q in xrange(self.input_dim)] + if X2 is None: + [np.einsum('ij,ij->i', tmp, X[:,q][:,None]-X[:,q][None,:], out=ret[:,q]) for q in xrange(self.input_dim)] + ret2 = np.empty(X.shape, dtype=np.float64) + [np.einsum('ij,ji->j', tmp, X[:,q][:,None]-X[:,q][None,:], out=ret2[:,q]) for q in xrange(self.input_dim)] + ret += ret2 + else: + [np.einsum('ij,ij->i', tmp, X[:,q][:,None]-X2[:,q][None,:], out=ret[:,q]) for q in xrange(self.input_dim)] ret /= self.lengthscale**2 return ret