Source code for monte.importance_sampling

"""
Module that contains function performing importance sampling.
"""


[docs]def importance(importance_sampler, importance_density, target_density, n): """ Performs importance sampling from `target_density` distribution using `importance` distribution as proposal distribution. :param importance_sampler: Function that samples from our importance distribution. Should be a distribution that is easy to sample from. :type importance_sampler: callable :param importance_density: Probability density/mass function of importance distribution. :type importance_density: callable :param target_density: Probability density/mass function of the distribution we want to have samples from. Intended to be a distribution that is difficult to sample from. :type target_density: callable :param n: Number of samples to be sampled. :type n: itn :return: Samples from our `target_distribution` that are obtained indirectly through importance sampling :rtype: ndarray """ samples_proposed = importance_sampler(n) weights = target_density(samples_proposed) / importance_density(samples_proposed) try: samples = samples_proposed * weights.reshape(n, 1) except Exception: samples = samples_proposed * weights return samples