gtsam_points
Loading...
Searching...
No Matches
running_statistics.hpp
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2024 Kenji Koide (k.koide@aist.go.jp)
3
4#pragma once
5
6#include <iostream>
7#include <Eigen/Core>
8
9namespace gtsam_points {
10
14template <typename T>
16public:
17 RunningStatistics() : num_data(0), sum(0), sum_sq(0), min_(std::numeric_limits<double>::max()), max_(std::numeric_limits<double>::lowest()) {}
18
20 void add(const T& x) {
21 num_data++;
22 sum += x;
23 sum_sq += x * x;
24
25 if constexpr (std::is_floating_point_v<T>) {
26 min_ = std::min(min_, x);
27 max_ = std::max(max_, x);
28 } else {
29 min_ = min_.cwiseMin(x);
30 max_ = max_.cwiseMax(x);
31 }
32 }
33
36 num_data += rhs.num_data;
37 sum += rhs.sum;
38 sum_sq += rhs.sum_sq;
39
40 if constexpr (std::is_floating_point_v<T>) {
41 min_ = std::min(min_, rhs.min_);
42 max_ = std::max(max_, rhs.max_);
43 } else {
44 min_ = min_.cwiseMin(rhs.min_);
45 max_ = max_.cwiseMax(rhs.max_);
46 }
47
48 return *this;
49 }
50
52 size_t size() const { return num_data; }
53
55 T mean() const { return sum / num_data; }
56
58 T var() const { return (sum_sq - sum * mean()) / num_data; }
59
61 T std() const {
62 if constexpr (std::is_floating_point_v<T>) {
63 return std::sqrt(var());
64 } else {
65 return var().sqrt();
66 }
67 }
68
70 const T& min() const { return min_; }
71
73 const T& max() const { return max_; }
74
75private:
76 size_t num_data;
77 T sum;
78 T sum_sq;
79 T min_;
80 T max_;
81};
82
83} // namespace gtsam_points
84
85namespace std {
86template <typename T>
87std::ostream& operator<<(std::ostream& os, const gtsam_points::RunningStatistics<T>& stats) {
88 if constexpr (std::is_floating_point_v<T>) {
89 os << "num_data=" << stats.size() << " mean=" << stats.mean() << " std=" << stats.std() << " min=" << stats.min() << " max=" << stats.max();
90 } else {
91 os << "num_data=" << stats.size() << " mean=" << stats.mean().transpose() << " std=" << stats.std().transpose()
92 << " min=" << stats.min().transpose() << " max=" << stats.max().transpose();
93 }
94
95 return os;
96}
97
98} // namespace std
Running statistics calculator.
Definition running_statistics.hpp:15
RunningStatistics & operator+=(const RunningStatistics &rhs)
Join two statistics.
Definition running_statistics.hpp:35
T mean() const
Mean.
Definition running_statistics.hpp:55
void add(const T &x)
Add a data point.
Definition running_statistics.hpp:20
size_t size() const
Number of data points.
Definition running_statistics.hpp:52
T var() const
Variance.
Definition running_statistics.hpp:58
const T & max() const
Maximum value.
Definition running_statistics.hpp:73
const T & min() const
Minimum value.
Definition running_statistics.hpp:70
T std() const
Standard deviation.
Definition running_statistics.hpp:61