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)