首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Vector 計算平均值與標準差(方差)

     編輯:關於C++

演算法

  1. accumulate 求和。
  2. 平均值 = 和 / n。
  3. 用 for_each + lambda 累加平方差。
  4. 樣本標準差 = sqrt(平方差和 / (n-1))。

程式碼

#include <vector>
#include <numeric>
#include <algorithm>
#include <cmath>

vector<double> resultSet = { /* ... */ };
double sum = accumulate(begin(resultSet), end(resultSet), 0.0);
double mean = sum / resultSet.size();
double accum = 0.0;
for_each(begin(resultSet), end(resultSet),
         [&](double d) { accum += (d - mean) * (d - mean); });
double stdev = sqrt(accum / (resultSet.size() - 1));

注意

  • 總體標準差分母用 n,樣本用 n-1(貝塞爾修正)。
  • 大數據量時考慮 Welford 單遍歷演算法提升數值穩定度。
  • C++17 可用 std::reduce(平行化)替代 accumulate。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved