diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp | |
parent | Initial commit. (diff) | |
download | ceph-upstream.tar.xz ceph-upstream.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp')
-rw-r--r-- | src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp b/src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp new file mode 100644 index 000000000..767bfad86 --- /dev/null +++ b/src/boost/libs/histogram/examples/guide_fill_weighted_profile.cpp @@ -0,0 +1,51 @@ +// Copyright 2019 Hans Dembinski +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + +//[ guide_fill_weighted_profile + +#include <boost/format.hpp> +#include <boost/histogram.hpp> +#include <cassert> +#include <iostream> +#include <sstream> + +int main() { + using namespace boost::histogram; + using namespace boost::histogram::literals; // _c suffix creates compile-time numbers + + // make 2D weighted profile + auto h = make_weighted_profile(axis::integer<>(0, 2), axis::integer<>(0, 2)); + + // The mean is computed from the values marked with the sample() helper function. + // Weights can be passed as well. The `sample` and `weight` arguments can appear in any + // order, but they must be the first or last arguments. + h(0, 0, sample(1)); // sample goes to cell (0, 0); weight is 1 + h(0, 0, sample(2), weight(3)); // sample goes to cell (0, 0); weight is 3 + h(1, 0, sample(3)); // sample goes to cell (1, 0); weight is 1 + h(1, 0, sample(4)); // sample goes to cell (1, 0); weight is 1 + h(0, 1, sample(5)); // sample goes to cell (1, 0); weight is 1 + h(0, 1, sample(6)); // sample goes to cell (1, 0); weight is 1 + h(1, 1, weight(4), sample(7)); // sample goes to cell (1, 1); weight is 4 + h(weight(5), sample(8), 1, 1); // sample goes to cell (1, 1); weight is 5 + + std::ostringstream os; + for (auto&& x : indexed(h)) { + const auto i = x.index(0_c); + const auto j = x.index(1_c); + const auto m = x->value(); // weighted mean + const auto v = x->variance(); // estimated variance of weighted mean + os << boost::format("index %i,%i mean %.1f variance %.1f\n") % i % j % m % v; + } + + std::cout << os.str() << std::flush; + + assert(os.str() == "index 0,0 mean 1.8 variance 0.5\n" + "index 1,0 mean 3.5 variance 0.5\n" + "index 0,1 mean 5.5 variance 0.5\n" + "index 1,1 mean 7.6 variance 0.5\n"); +} + +//] |