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