47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
#include "mediapipe/framework/profiler/reporter/statistic.h"
|
||
|
||
#include <cmath>
|
||
|
||
#include "mediapipe/framework/calculator.pb.h"
|
||
#include "mediapipe/framework/calculator_profile.pb.h"
|
||
|
||
namespace mediapipe {
|
||
namespace reporter {
|
||
|
||
// Pushes a single value into the statistics, updating mean and stddev.
|
||
void Statistic::Push(double x) {
|
||
++counter_;
|
||
|
||
if (counter_ == 1) {
|
||
mean_ = x;
|
||
ssd_ = 0.0;
|
||
total_impl_ = x;
|
||
} else {
|
||
// Implementing Welford’s algorithm for computing variance.
|
||
auto old_mean = mean_;
|
||
mean_ = mean_ + (x - mean_) / counter_;
|
||
ssd_ = ssd_ + (x - mean_) * (x - old_mean);
|
||
total_impl_ += x;
|
||
}
|
||
}
|
||
|
||
// Returns the number of data points used to calculator the mean and
|
||
// stddev.
|
||
int Statistic::data_count() const { return counter_; }
|
||
|
||
// Returns the mean of the data pushed into this statistic.
|
||
double Statistic::mean() const { return (counter_ > 0) ? mean_ : 0.0; }
|
||
|
||
// Returns the variance of the data pushed into this statistic.
|
||
double Statistic::variance() const {
|
||
return ((counter_ > 1) ? ssd_ / (counter_ - 1) : 0.0);
|
||
}
|
||
|
||
// Returns the standard deviation of the data pushed into this statistic.
|
||
double Statistic::stddev() const { return std::sqrt(variance()); }
|
||
|
||
double Statistic::total() const { return total_impl_; }
|
||
|
||
} // namespace reporter
|
||
} // namespace mediapipe
|