def testSinglePointSingleComponent_1d(self): x = array([0]) mu = array([1]) sigma = eye(1) self.assertAlmostEqual( pdf(x, mu, sigma), mvnormpdf(x, mu, sigma), delta=1e-6, msg='pmvnormpdf and mvnormpdf differ in result, %f != %f' % (pdf(x, mu, sigma), mvnormpdf(x, mu, sigma))) for i in range(10): x = array([uniform(-4, 4)]) mu = array([uniform(-4, 4)]) a = uniform(.1, 4) sigma = eye(1) * a p = pdf(x, loc=mu, scale=sqrt(sigma)[0]) m = mvnormpdf(x, mu, sigma) self.assertAlmostEqual( p, m, delta=1e-6, msg= 'pmvnormpdf and mvnormpdf differ in result, %0.8e != %0.8e, [%0.8e], (%d): %s, %s, %s ' % (p, m, p - m, i, str(x), str(mu), str(sigma).replace( '\n', ',')))
def testMultiplePointSingleComponent(self): for i in range(100): x = array([[uniform(-4, 4), uniform(-4, 4)], [uniform(-4, 4), uniform(-4, 4)]]) mu = array([uniform(-4, 4), uniform(-4, 4)]) a = uniform(0, 4) sigma = eye(2) + a self.assertAlmostEqual(float(pmvnormpdf(x, mu, sigma)[0][0]), float(mvnormpdf(x, mu, sigma)[0]), 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f, (%d): %s, %s, %s ' % (float(pmvnormpdf(x, mu, sigma)[0][0]), float(mvnormpdf(x, mu, sigma)[0]), i, str(x), str(mu), str(sigma).replace('\n', ','))) self.assertAlmostEqual(float(pmvnormpdf(x, mu, sigma)[1][0]), float(mvnormpdf(x, mu, sigma)[1]), 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f, (%d): %s, %s, %s ' % (float(pmvnormpdf(x, mu, sigma)[1][0]), float(mvnormpdf(x, mu, sigma)[1]), i, str(x), str(mu), str(sigma).replace('\n', ',')))
def testSinglePointSingleComponent_1d(self): x = array([0]) mu = array([1]) sigma = eye(1) self.assertAlmostEqual(pdf(x, mu, sigma), mvnormpdf(x, mu, sigma), delta=1e-6, msg='pmvnormpdf and mvnormpdf differ in result, %f != %f' % (pdf(x, mu, sigma), mvnormpdf(x, mu, sigma))) for i in range(10): x = array([uniform(-4, 4)]) mu = array([uniform(-4, 4)]) a = uniform(.1, 4) sigma = eye(1) * a p = pdf(x,loc= mu, scale= sqrt(sigma)[0]) m = mvnormpdf(x, mu, sigma) self.assertAlmostEqual(p, m, delta=1e-6, msg='pmvnormpdf and mvnormpdf differ in result, %0.8e != %0.8e, [%0.8e], (%d): %s, %s, %s ' % (p, m, p - m, i, str(x), str(mu), str(sigma).replace('\n', ',')))
def testSinglePointSingleComponent(self): x = array([0, 0]) mu = array([1, 1]).reshape(1,2) sigma = eye(2).reshape(1,2,2) mx = mvnormpdf(x, mu, sigma) px = pmvnormpdf(x, mu.squeeze(), sigma.squeeze()) self.assertAlmostEqual(px, mx, 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f' % (px, mx)) for i in range(100): x = array([uniform(-4, 4), uniform(-4, 4)]) mu = array([uniform(-4, 4), uniform(-4, 4)]).reshape(1,2) a = uniform(0, 4) sigma = (eye(2) + a).reshape(1,2,2) mx = mvnormpdf(x, mu, sigma) px = pmvnormpdf(x, mu.squeeze(), sigma.squeeze()) self.assertAlmostEqual(px, mx, 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f, (%d): %s, %s, %s ' % (px, mx, i, str(x), str(mu), str(sigma).replace('\n', ',')))
def testMultiplePointSingleComponent_1d(self): x = array([0,1,2,3,4]) mu = array([1]) sigma = eye(1).reshape(1,1,1) px = pdf(x, mu, sigma).squeeze() mx = mvnormpdf(x, mu, sigma) assert_array_almost_equal(px, mx, 6, 'pmvnormpdf and mvnormpdf differ in result, %s != %s' % (str(type(px)), str(type(mx))))
def testSinglePointSingleComponent(self): x = array([0, 0]) mu = array([1, 1]) sigma = eye(2) self.assertAlmostEqual( pmvnormpdf(x, mu, sigma), mvnormpdf(x, mu, sigma), 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f' % (pmvnormpdf(x, mu, sigma), mvnormpdf(x, mu, sigma))) for i in range(100): x = array([uniform(-4, 4), uniform(-4, 4)]) mu = array([uniform(-4, 4), uniform(-4, 4)]) a = uniform(0, 4) sigma = eye(2) + a self.assertAlmostEqual( pmvnormpdf(x, mu, sigma), mvnormpdf(x, mu, sigma), 6, 'pmvnormpdf and mvnormpdf differ in result, %f != %f, (%d): %s, %s, %s ' % (pmvnormpdf(x, mu, sigma), mvnormpdf(x, mu, sigma), i, str(x), str(mu), str(sigma).replace('\n', ',')))
def check_mode(m, pm, pi, mu, sigma): """Check that modes are local maxima""" k, p = mu.shape z = np.zeros(p) tm = [] # true modes tpm = [] # true mode densities for _m, _pm in zip(m, pm): G = np.zeros((p, p)) omega = sigma.copy() for j in range(k): omega[j] = inv(sigma[j]) eij = _m - mu[j] S = np.dot(np.identity(p) - np.outer(eij, eij), omega[j]) G += pi[j] * mvnormpdf(eij, z, sigma[j], use_gpu=False) * S if np.linalg.det(G) > 0: tm.append(_m) tpm.append(_pm) return np.array(tm), np.array(tpm)