import numpy as np
import sys
import chippr
from chippr import utils as u
[docs]class gauss(object):
def __init__(self, mean, var):
"""
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()
[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 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 = np.zeros_like(xs)
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)
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()
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
"""
xs = np.array([self.sample_one() for n in range(n_samps)])
return xs