Source code for asaplib.compressor.reweight

"""
Select samples using a re-weighted distribution

The original distribution (KDE) of the sample is
:math: \rho = exp(-F)
and we select the samples using a well-tempered distribution
:math: \rho(\lambda) = exp(-F/\lambda)  
"""

import numpy as np

[docs]def reweight(logkde, n_sparse, reweight_lambda): """ Parameters: ------------ logkde: list, type=float The (log of) kernel density for each sample reweight_lambda: float reweighting factor n_sparse: int number of samples to select Return: ------------ sbs: list, type=int A list of selected samples """ nframes = len(logkde) new_kde = np.zeros(nframes) for i in range(nframes): new_kde[i] = np.exp(logkde[i] / reweight_lambda) / np.exp(logkde[i]) # compute the normalization factor so we expect to select n samples in the end normalization = n_sparse / np.sum(new_kde) new_kde *= normalization sbs = [] randomchoice = np.random.rand(nframes) for i in range(nframes): if randomchoice[i] < new_kde[i]: sbs.append(i) return sbs