"""
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