Source code for monte_carlo_analysis.uncertainty_metrics.BhattacharyaCoefficentDistributionSimilarity
"""
**Author** : Robin Camarasa
**Institution** : Erasmus Medical Center
**Position** : PhD student
**Contact** : r.camarasa@erasmusmc.nl
**Date** : 2020-10-01
**Project** : monte_carlo_analysis
**Implement class BhattacharyaCoefficentDistributionSimilarity**
"""
from monte_carlo_analysis.uncertainty_metrics import DistributionSimilarityUncertaintyMetric
import numpy as np
from monte_carlo_analysis.utils.numba_utils import numba_histogram
from numba import jit
[docs]class BhattacharyaCoefficentDistributionSimilarity(DistributionSimilarityUncertaintyMetric):
"""
Implement BhattacharyaCoefficentDistributionSimilarity
:param nbins: Number of bins of the histogram
"""
def __init__(self, nbins=100):
super(BhattacharyaCoefficentDistributionSimilarity, self)
self.nbins = nbins
self.transformation = self.get_transformation(nbins)
[docs] def get_transformation(self, nbins: int) -> callable:
"""
Define the transformation applied to the distribution
:param nbins: number of bins in the histogram
:return: transformation to apply to the distribution
"""
#@jit(nopython=True)
def transformation(distribution_1: np.array, distribution_2) -> float:
# discretize the distribution the division
# by the sum is due to np.histogram implementation
discretized_distribution_1 = numba_histogram(
distribution_1, bins=nbins, min_value=0, max_value=1,
normalized=True
)[0]
discretized_distribution_2 = numba_histogram(
distribution_2, bins=nbins, min_value=0, max_value=1,
normalized=True
)[0]
return np.sum(
np.sqrt(discretized_distribution_1 * discretized_distribution_2)
)
return transformation