25template<
bool weighted_,
typename Stat_,
typename Weight_,
typename Output_>
26void average_vectors(std::size_t n, std::vector<Stat_*> in,
const Weight_* w, Output_* out,
bool skip_nan) {
28 std::fill_n(out, n, std::numeric_limits<Output_>::quiet_NaN());
30 }
else if (in.size() == 1) {
31 if constexpr(weighted_) {
33 std::fill_n(out, n, std::numeric_limits<Output_>::quiet_NaN());
37 std::copy(in[0], in[0] + n, out);
41 std::fill_n(out, n, 0);
42 std::vector<Weight_> accumulated(skip_nan ? n : 0);
45 for (
auto current : in) {
46 if constexpr(weighted_) {
49 Weight_ weight = *(wcopy++);
54 for (
decltype(n) i = 0; i < n; ++i) {
55 auto x = current[i] * weight;
58 accumulated[i] += weight;
62 for (
decltype(n) i = 0; i < n; ++i) {
63 out[i] += current[i] * weight;
71 for (
decltype(n) i = 0; i < n; ++i) {
79 for (
decltype(n) i = 0; i < n; ++i) {
86 for (
decltype(n) i = 0; i < n; ++i) {
87 out[i] /= accumulated[i];
91 if constexpr(weighted_) {
92 denom /= std::accumulate(w, w + in.size(), 0.0);
96 for (
decltype(n) i = 0; i < n; ++i) {
121template<
typename Stat_,
typename Output_>
123 internal::average_vectors<false>(n, std::move(in),
static_cast<int*
>(NULL), out, skip_nan);
139template<
typename Output_ =
double,
typename Stat_>
140std::vector<Output_>
average_vectors(
size_t n, std::vector<Stat_*> in,
bool skip_nan) {
141 auto out = sanisizer::create<std::vector<Output_> >(n);
163template<
typename Stat_,
typename Weight_,
typename Output_>
167 auto numin = in.size();
168 for (
decltype(numin) i = 1; i < numin; ++i) {
177 std::fill_n(out, n, std::numeric_limits<Output_>::quiet_NaN());
185 internal::average_vectors<true>(n, std::move(in), w, out, skip_nan);
204template<
typename Output_ =
double,
typename Stat_,
typename Weight_>
206 auto out = sanisizer::create<std::vector<Output_> >(n);
void average_vectors_weighted(size_t n, std::vector< Stat_ * > in, const Weight_ *w, Output_ *out, bool skip_nan)
Definition average_vectors.hpp:164
void average_vectors(size_t n, std::vector< Stat_ * > in, Output_ *out, bool skip_nan)
Definition average_vectors.hpp:122