Example #1
0
template<class TV> static inline Tuple<T,TV> weighted_average(RawArray<const T> mass, RawArray<const TV> X) {
  const int n = X.size();
  if (mass.size()) {
    GEODE_ASSERT(mass.size()==X.size());
    const T total = mass.sum();
    TV center;
    for (int i=0;i<n;i++)
      center += mass[i]*X[i];
    return tuple(total,center/total);
  } else {
    // Unweighted
    return tuple(n,X.mean());
  }
}