如果我们天真地计算均值:
std::vector<double> values;
double sum = std::accumulate(begin(values), end(values), 0.0);
double mean = sum / values.size();
和 values.size()
很大,我们可能会得到不准确的结果,因为 float 在较高范围内分辨率较低。或者更糟,如果我理解正确,我们可以获得无限的结果。
当我们有一个偶数的值时,我们可以计算前半部分的平均值,然后计算后半部分的平均值,然后找到这两个平均值的平均值。
这似乎不是一个新问题,但我很难找到资源。我认为有更复杂的技术在
中权衡- 稳健性
- 计算复杂度
- 实现难度
我想知道是否有人在某处总结了它们,或者如果它们在某些库中可用,甚至更好。
最佳答案
您可以使用描述的在线算法 here .
基本上(在 pythonish 伪代码中):
n = 0
mean = 0
for value in data:
n += 1
mean += (value - mean)/n
该算法在数值上比单纯的实现更稳定。
关于c++ - 如何计算均值(平均)robuSTLy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813278/