From e7650c8a90de31e3d4877fcbfbc217a9b1202ebf Mon Sep 17 00:00:00 2001 From: mzwiessele Date: Mon, 20 Apr 2015 16:02:59 +0200 Subject: [PATCH] [sparse gp] memory overflow with big data, iterating over dimensions now --- GPy/core/sparse_gp.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/GPy/core/sparse_gp.py b/GPy/core/sparse_gp.py index 35644bfe..624a8f9c 100644 --- a/GPy/core/sparse_gp.py +++ b/GPy/core/sparse_gp.py @@ -10,6 +10,7 @@ from .parameterization.variational import VariationalPosterior, NormalPosterior from ..util.linalg import mdot import logging +import itertools logger = logging.getLogger("sparse gp") class SparseGP(GP): @@ -135,7 +136,13 @@ class SparseGP(GP): var = var else: Kxx = kern.Kdiag(Xnew) - var = (Kxx - np.sum(np.dot(np.atleast_3d(self.posterior.woodbury_inv).T, Kx) * Kx[None,:,:], 1)).T + if self.posterior.woodbury_inv.ndim == 2: + var = Kxx - np.sum(np.dot(self.posterior.woodbury_inv.T, Kx) * Kx, 0) + elif self.posterior.woodbury_inv.ndim == 3: + var = np.empty((Kxx.shape[0],self.posterior.woodbury_inv.shape[2])) + for i in range(var.shape[1]): + var[:, i] = (Kxx - (np.sum(np.dot(self.posterior.woodbury_inv[:, :, i].T, Kx) * Kx, 0))) + var = var #add in the mean function if self.mean_function is not None: mu += self.mean_function.f(Xnew)