public static IDiscreteDistribution <T> ToWeighted <T>([NotNull] this IEnumerable <T> items, [NotNull] IEnumerable <int> weights) { var list = items.ToList(); return(WeightedInteger.Distribution(weights) .Select(i => list[i])); }
public static IDiscreteDistribution <TR> Select <TA, TR>([NotNull] this IDiscreteDistribution <TA> d, [NotNull] Func <TA, TR> projection) { var dict = d.Support() .GroupBy(projection, d.Weight) .ToDictionary(g => g.Key, g => g.Sum()); var rs = dict.Keys.ToList(); return(Projected <int, TR> .Distribution( WeightedInteger.Distribution( rs.Select(r => dict[r])), i => rs[i])); }