Source code for gunz_cm.resolution_enhancements.preprocs.downscaling

"""
Module.

Examples
--------
"""
__author__ = "Yeremia Gunawan Adhisantoso"
__email__ = "adhisant@tnt.uni-hannover.de"
__license__ = "Clear BSD"
__version__ = "1.0.0"
import numpy as np

[docs] def downscale_counts( counts:np.ndarray, ds_ratio:int=None, ds_num_counts:int=None, num_counts:int=None, counts_cumsum:np.ndarray=None, ret_ds_num_counts=False, ) -> np.ndarray: """ Downscale the counts by either a ratio or a target number of counts. Parameters ---------- counts (array_like ): The counts to be downscaled. ds_ratio (int, optional): The ratio to downscale the counts by. Defaults to None. target_num_counts (int, optional): The target number of counts to downscale to. Defaults to None. num_counts (int, optional): The total number of counts in the input. Defaults to None. counts_cumsum (np.ndarray, optional): The cumulative sum of the counts. Defaults to None. Returns ------- np.ndarray: The downscaled counts and the target number of counts. Examples -------- """ if num_counts is None: num_counts = counts.sum() if counts_cumsum is None: counts_cumsum = np.cumsum(counts) if ds_ratio is not None: ds_num_counts = int(num_counts // ds_ratio) else: assert ds_num_counts is not None tmp_ids = np.random.choice(num_counts, ds_num_counts, replace=False) sel_ids = np.searchsorted(counts_cumsum, tmp_ids) ids, tmp_counts = np.unique(sel_ids, return_counts=True) new_counts = np.zeros_like(counts) new_counts[ids] = tmp_counts new_counts = np.minimum(counts, new_counts) if ret_ds_num_counts: return new_counts, ds_num_counts else: return new_counts