代码之家  ›  专栏  ›  技术社区  ›  sabkaraja

计算或更新平均值,无需随时间迭代

  •  0
  • sabkaraja  · 技术社区  · 7 年前

    timestamp               value
    20190304000000           62.7
    20190304000010           62.5
    20190304000020           62.8 
    .... 
    ....
    

    如何在不增加内存占用的情况下计算和更新平均值。也就是说,整个数据存储(持久或内存)是不可能的

    2 回复  |  直到 7 年前
        1
  •  2
  •   MBo    7 年前

    除了其他答案外,您可能还需要使用IIR筛选器来获取 Exponential moving average : filter that applies weighting factors which decrease exponentially ,因此最后一个值比旧值的影响更大

    newAverage = OldAverage * (1-alpha) + NewValue * alpha
    

    alpha 是与递减时间/常数相关的小值,如0.1

        2
  •  1
  •   Dillon Davis    7 年前

    from itertools import count
    
    temperature_sum = 0
    for temperature_count in count(1):
        temperature_sum += read_from_sensor()
        print("Average: {}".format(temperature_sum / temperature_count))
    
        3
  •  0
  •   sabkaraja    7 年前

    我们需要两个变量

    int count;
    float average;
    
    void main() {
       do while(true) {
          float temperature = ReadFromSensor(); //not included
          average = ((average*count) + temperature)/ ++count;
          cout << "average: " << average << endl;
       }
    }