def _calcPredProbVec_Fast(self, SS, x):
nu, B, m, kappa = self.calcPostParams(SS)
kB = B
kB *= ((kappa + 1) / kappa)[:, np.newaxis, np.newaxis]
logp = np.zeros(SS.K)
p = logp # Rename so its not confusing what we're returning
for k in xrange(SS.K):
cholKB = scipy.linalg.cholesky(kB[k], lower=1)
logdetKB = 2 * np.sum(np.log(np.diag(cholKB)))
mVec = np.linalg.solve(cholKB, x - m[k])
mDist_k = np.inner(mVec, mVec)
logp[k] = -0.5 * logdetKB - 0.5 * \
(nu[k] + 1) * np.log(1.0 + mDist_k)
logp += gammaln(0.5 * (nu + 1)) - gammaln(0.5 * (nu + 1 - self.D))
logp -= np.max(logp)
np.exp(logp, out=p)
return p
评论列表
文章目录