Source code for gauss

# Wrapper for pomegranate.distributions.NormalDistribution

import sys

import numpy as np

from pomegranate.distributions import NormalDistribution as ND

import chippr

[docs]class gauss(object): def __init__(self, mean, var, bounds=None): """ A univariate Gaussian probability distribution object Parameters ---------- mean: float mean of Gaussian probability distribution var: float variance of Gaussian probability distribution """ self.mean = mean self.var = var self.sigma = self.norm_var() self.invvar = self.invert_var() self.dist = ND(self.mean, self.sigma)
[docs] def norm_var(self): """ Function to create standard deviation from variance """ return np.sqrt(self.var)
[docs] def invert_var(self): """ Function to invert variance """ return 1./self.var
[docs] def pdf(self, xs): return self.evaluate(xs)
[docs] def evaluate_one(self, x): """ Function to evaluate Gaussian probability distribution once Parameters ---------- x: float value at which to evaluate Gaussian probability distribution Returns ------- p: float probability associated with x """ # p = 1. / (np.sqrt(2. * np.pi) * self.sigma) * \ # np.exp(-0.5 * (self.mean - x) * self.invvar * (self.mean - x)) p = self.dist.probability(x) return p
[docs] def evaluate(self, xs): """ Function to evaluate univariate Gaussian probability distribution at multiple points Parameters ---------- xs: numpy.ndarray, float input values at which to evaluate probability Returns ------- ps: ndarray, float output probabilities """ # ps = 1. / (np.sqrt(2. * np.pi) * self.sigma) * \ # np.exp(-0.5 * (self.mean - xs) * self.invvar * (self.mean - xs)) # ps = np.zeros_like(xs) # for n, x in enumerate(xs): # ps[n] += self.evaluate_one(x) ps = self.dist.probability(xs) return ps
[docs] def sample_one(self): """ Function to take one sample from univariate Gaussian probability distribution Returns ------- x: float single sample from Gaussian probability distribution """ # x = self.mean + self.sigma * np.random.normal() x = self.dist.sample(1) return x
[docs] def sample(self, n_samps): """ Function to sample univariate Gaussian probability distribution Parameters ---------- n_samps: positive int number of samples to take Returns ------- xs: ndarray, float array of n_samps samples from Gaussian probability distribution """ # print('gauss trying to sample '+str(n_samps)+' from '+str(self.dist)) # xs = np.array([self.sample_one() for n in range(n_samps)]) xs = np.array(self.dist.sample(n_samps)) # print('gauss sampled '+str(n_samps)+' from '+str(self.dist)) return xs