def rand_k(self, k):
"""
Return a random mean vector and covariance matrix from the posterior
NIW distribution for component `k`.
"""
k_N = self.prior.k_0 + self.counts[k]
v_N = self.prior.v_0 + self.counts[k]
m_N = self.m_N_numerators[k]/k_N
S_N = self.S_N_partials[k] - k_N*np.outer(m_N, m_N)
sigma = np.linalg.solve(cholesky(S_N).T, np.eye(self.D)) # don't understand this step
sigma = wishart.iwishrnd(sigma, v_N, sigma)
mu = np.random.multivariate_normal(m_N, sigma/k_N)
return mu, sigma
评论列表
文章目录