Source code for rubin_scheduler.utils.binned_stats
__all__ = ("int_binned_stat",)
import numpy as np
[docs]
def int_binned_stat(ids, values, statistic=np.mean):
    """
    Like scipy.binned_statistic, but for unique integer ids.
    Parameters
    ----------
    ids : array-like of ints
        The integer ID for each value
    values : array-like
        The values to be combined
    statistic : function (np.mean)
        Function to run on the values that have matching ids.
    Returns
    -------
    unique ids, binned values
    """
    uids = np.unique(ids)
    order = np.argsort(ids)
    ordered_ids = ids[order]
    ordered_values = values[order]
    left = np.searchsorted(ordered_ids, uids, side="left")
    right = np.searchsorted(ordered_ids, uids, side="right")
    stat_results = []
    for le, ri in zip(left, right):
        stat_results.append(statistic(ordered_values[le:ri]))
    return uids, np.array(stat_results)