diff --git a/src/shogun/regression/gp/ExactInferenceMethod.cpp b/src/shogun/regression/gp/ExactInferenceMethod.cpp index 2e2020d0ca3..eba9f1286cc 100644 --- a/src/shogun/regression/gp/ExactInferenceMethod.cpp +++ b/src/shogun/regression/gp/ExactInferenceMethod.cpp @@ -393,7 +393,7 @@ void CExactInferenceMethod::update_chol() for (index_t i=0; i(m_ktrtr.num_rows, m_ktrtr.num_cols); @@ -411,33 +411,19 @@ void CExactInferenceMethod::update_chol() void CExactInferenceMethod::update_alpha() { - float64_t sigma = - dynamic_cast(m_model)->get_sigma(); - for (int i = 0; i < m_label_vector.vlen; i++) m_label_vector[i] = m_label_vector[i] - m_data_means[i]; m_alpha = SGVector(m_label_vector.vlen); - /* temporaryly add noise */ - float64_t noise=(m_scale*m_scale)/(sigma*sigma); - for (index_t i=0; i K(m_ktrtr.matrix, m_ktrtr.num_rows, m_ktrtr.num_cols); + /* creates views on cholesky matrix, labels, and alpha and solve system + * (L * L^T) * a = y for a */ Map a(m_alpha.vector, m_alpha.vlen); Map y(m_label_vector.vector, m_label_vector.vlen); + Map L(m_L.matrix, m_L.num_rows, m_L.num_cols); - LLT llt; - llt.compute(K); - a=llt.solve(y); - - /* remove noise again */ - for (index_t i=0; i().adjoint().solve(y); + a=L.triangularView().solve(a); } #endif #endif // HAVE_LAPACK