Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Toolbox/LinearAlgebra.cpp @ 1984:187a261d7ae2
computation of mean and stddev in rectangle probes
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 31 Oct 2022 14:42:46 +0100 |
parents | 6ce81914f7e4 |
children | 07964689cb0b |
line wrap: on
line diff
--- a/OrthancStone/Sources/Toolbox/LinearAlgebra.cpp Mon Oct 31 12:32:47 2022 +0100 +++ b/OrthancStone/Sources/Toolbox/LinearAlgebra.cpp Mon Oct 31 14:42:46 2022 +0100 @@ -41,6 +41,59 @@ { namespace LinearAlgebra { + void OnlineVarianceEstimator::AddSample(double value) + { + count_++; + sum_ += value; + sumOfSquares_ += value * value; + } + + + void OnlineVarianceEstimator::Clear() + { + count_ = 0; + sum_ = 0; + sumOfSquares_ = 0; + } + + + double OnlineVarianceEstimator::GetMean() const + { + if (count_ == 0) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else + { + return sum_ / static_cast<double>(count_); + } + } + + + double OnlineVarianceEstimator::GetVariance() const + { + if (count_ == 0) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + } + else if (count_ == 1) + { + return 0; + } + else + { + const double n = static_cast<double>(count_); + return (sumOfSquares_ * n - sum_ * sum_) / (n * (n - 1.0)); + } + } + + + double OnlineVarianceEstimator::GetStandardDeviation() const + { + return sqrt(GetVariance()); + } + + void Print(const Vector& v) { for (size_t i = 0; i < v.size(); i++)