GooseEYE 0.9.1
Loading...
Searching...
No Matches
Ensemble_mean.hpp
Go to the documentation of this file.
1
7#ifndef GOOSEEYE_ENSEMBLE_MEAN_HPP
8#define GOOSEEYE_ENSEMBLE_MEAN_HPP
9
10#include "GooseEYE.h"
11
12namespace GooseEYE {
13
14template <class T>
15void Ensemble::mean(const T& f)
16{
17 GOOSEEYE_ASSERT(m_shape == std::vector<size_t>(MAX_DIM, 1), std::out_of_range);
18 GOOSEEYE_ASSERT(m_stat == Type::mean || m_stat == Type::Unset, std::out_of_range);
19
20 m_stat = Type::mean;
21
22 m_first(0) += static_cast<double>(xt::sum(f)[0]);
23 m_second(0) += static_cast<double>(xt::sum(xt::pow(f, 2.0))[0]);
24 m_norm(0) += static_cast<double>(f.size());
25}
26
27template <class T, class M>
28void Ensemble::mean(const T& f, const M& fmask)
29{
30 static_assert(std::is_integral<typename M::value_type>::value, "Integral mask required.");
31
32 GOOSEEYE_ASSERT(xt::has_shape(f, fmask.shape()), std::out_of_range);
33 GOOSEEYE_ASSERT(xt::all(xt::equal(fmask, 0) || xt::equal(fmask, 1)), std::out_of_range);
34 GOOSEEYE_ASSERT(m_shape == std::vector<size_t>(MAX_DIM, 1), std::out_of_range);
35 GOOSEEYE_ASSERT(m_stat == Type::mean || m_stat == Type::Unset, std::out_of_range);
36
37 m_stat = Type::mean;
38
39 m_first(0) += static_cast<double>(xt::sum(xt::where(xt::equal(fmask, 0), f, 0.0))[0]);
40
41 m_second(0) +=
42 static_cast<double>(xt::sum(xt::where(xt::equal(fmask, 0), xt::pow(f, 2.0), 0.0))[0]);
43
44 m_norm(0) += static_cast<double>(xt::sum(1 - fmask)[0]);
45}
46
47} // namespace GooseEYE
48
49#endif
#define GOOSEEYE_ASSERT(expr, assertion)
All assertions are implemented as:
Definition config.h:91
Toolbox to compute statistics.
Definition config.h:128