8 #ifndef SRC_INCLUDE_SMASH_AVERAGE_H_
9 #define SRC_INCLUDE_SMASH_AVERAGE_H_
65 std::pair<std::vector<T>, std::vector<T>>
dedup_avg(
const std::vector<T>& x,
66 const std::vector<T>& y) {
67 if (x.size() != y.size()) {
69 ss <<
"x and y have to be of same size: " << x.size() <<
" != " << y.size();
70 throw std::runtime_error(ss.str());
73 throw std::runtime_error(
"x cannot be empty.");
76 new_x.reserve(x.size());
78 new_y.reserve(y.size());
81 for (
size_t i = 0; i < x.size(); i++) {
86 new_x.push_back(x[i - 1]);
93 new_x.push_back(x.back());
95 return std::make_pair(std::move(new_x), std::move(new_y));
Calculate an average value incrementally.
void clear()
Reset the average to 0.
void add(T x)
Add a value x to the set of numbers defining the average.
Average()
Create a new object to calculate an average.
uint64_t number_of_values() const
std::pair< std::vector< T >, std::vector< T > > dedup_avg(const std::vector< T > &x, const std::vector< T > &y)
Remove duplicates from data (x, y) by averaging y.