Source code for monte_carlo_analysis.strategies.ClassWiseDistributionStrategy
"""
**Author** : Robin Camarasa
**Institution** : Erasmus Medical Center
**Position** : PhD student
**Contact** : r.camarasa@erasmusmc.nl
**Date** : 2020-10-29
**Project** : monte_carlo_analysis
**Implement ClassWiseDistributionStrategy class**
"""
import numpy as np
from itertools import product
from monte_carlo_analysis.strategies import Strategy
from numba import jit
[docs]class ClassWiseDistributionStrategy(Strategy):
[docs] @staticmethod
@jit
def transformation(
uncertainty_metric_transformation: callable,
ensemble_output: np.array, counter: list
) -> np.array:
"""
Compute the strategy
:param ensemble_output: Ensemble error
"""
# Get the dim size of the output uncertainty map
uncertainty_map_shape = ensemble_output.shape[2:]
# Initialize uncertainty metric
uncertainty_map = np.zeros(
(ensemble_output.shape[1], ensemble_output.shape[1]) +\
uncertainty_map_shape
)
# Loop over the indexes of the output uncertainty metric
for i in counter:
for j1 in range(ensemble_output.shape[1]):
for j2 in range(j1, ensemble_output.shape[1]):
uncertainty_map[(j1, j2,) + i] = uncertainty_metric_transformation(
ensemble_output[(slice(None), j1,) + i],
ensemble_output[(slice(None), j2,) + i]
)
uncertainty_map[j2, j1, :] = uncertainty_map[j1, j2, :]
return np.max(uncertainty_map, axis=0)