#ifndef _mean_n_ #define _mean_n_ #include "./utils/vector.h" #include "./utils/matrix.h" #include "./core/omp_config.h" namespace numerics{ template T vecmean(utils::Vector& a) { T mean(T{0}); const uint64_t N = a.size(); for (uint64_t i = 0; i < N; ++i) { mean += a[i]; } mean /= (static_cast(N)); return mean; } template T vecmean_isequal(utils::Vector& a, utils::Vector& b, T tol=1e-12) { uint64_t count = T{0}; const uint64_t N = a.size(); if (a.size() != b.size()){ throw std::runtime_error("vecmean_equal: dimension mismatch"); } for (uint64_t i = 0; i < N; ++i) { if ((a[i]-b[i]) < tol){ count += 1; } } return static_cast(count)/static_cast(N); } template Td vecmean_equal(utils::Vector& a, utils::Vector& b) { Ti count = Ti{0}; const uint64_t N = a.size(); if (a.size() != b.size()){ throw std::runtime_error("vecmean_equal: dimension mismatch"); } for (uint64_t i = 0; i < N; ++i) { if (a[i]==b[i]){ count += Ti{1}; } } return static_cast(count)/static_cast(N); } } // namespace numerics #endif // _mean_n_