diff --git a/GPy/likelihoods/EP.py b/GPy/likelihoods/EP.py index 6e2d9474..00f61bc6 100644 --- a/GPy/likelihoods/EP.py +++ b/GPy/likelihoods/EP.py @@ -113,11 +113,11 @@ class EP(likelihood): #Site parameters update Delta_tau = self.delta/self.eta*(1./sigma2_hat[i] - 1./Sigma[i,i]) Delta_v = self.delta/self.eta*(mu_hat[i]/sigma2_hat[i] - mu[i]/Sigma[i,i]) - self.tau_tilde[i] = self.tau_tilde[i] + Delta_tau - self.v_tilde[i] = self.v_tilde[i] + Delta_v + self.tau_tilde[i] += Delta_tau + self.v_tilde[i] += Delta_v #Posterior distribution parameters update - si=Sigma[:,i].reshape(self.N,1) - Sigma = Sigma - Delta_tau/(1.+ Delta_tau*Sigma[i,i])*np.dot(si,si.T) + si=Sigma[:,i:i+1] + Sigma -= Delta_tau/(1.+ Delta_tau*Sigma[i,i])*np.dot(si,si.T)#DSYR mu = np.dot(Sigma,self.v_tilde) self.iterations += 1 #Sigma recomptutation with Cholesky decompositon diff --git a/GPy/util/linalg.py b/GPy/util/linalg.py index 42f75d85..64155dca 100644 --- a/GPy/util/linalg.py +++ b/GPy/util/linalg.py @@ -236,6 +236,18 @@ def tdot(*args, **kwargs): else: return tdot_numpy(*args,**kwargs) +def DSYR(A,x,alpha=1.): + N = c_int(A.shape[0]) + LDA = c_int(A.shape[0]) + UPLO = c_char('l') + ALPHA = c_double(alpha) + A_ = A.ctypes.data_as(ctypes.c_void_p) + x_ = x.ctypes.data_as(ctypes.c_void_p) + INCX = c_int(1) + _blaslib.dsyr_(byref(UPLO), byref(N), byref(ALPHA), + x_, byref(INCX), A_, byref(LDA)) + symmetrify(A,upper=True) + def symmetrify(A,upper=False): """ Take the square matrix A and make it symmetrical by copting elements from the lower half to the upper @@ -259,19 +271,20 @@ def symmetrify(A,upper=False): } """ if A.flags['C_CONTIGUOUS'] and upper: - weave.inline(f_contig_code,['A','N']) + weave.inline(f_contig_code,['A','N'], extra_compile_args=['-O3']) elif A.flags['C_CONTIGUOUS'] and not upper: - weave.inline(c_contig_code,['A','N']) + weave.inline(c_contig_code,['A','N'], extra_compile_args=['-O3']) elif A.flags['F_CONTIGUOUS'] and upper: - weave.inline(c_contig_code,['A','N']) + weave.inline(c_contig_code,['A','N'], extra_compile_args=['-O3']) elif A.flags['F_CONTIGUOUS'] and not upper: - weave.inline(f_contig_code,['A','N']) + weave.inline(f_contig_code,['A','N'], extra_compile_args=['-O3']) else: tmp = np.tril(A) A[:] = 0.0 A += tmp A += np.tril(tmp,-1).T + def symmetrify_murray(A): A += A.T nn = A.shape[0]