计算或更新平均值,而无需随着时间的推移进行迭代

时间:2019-03-06 05:44:52

标签: algorithm

考虑一个小型监控设备,该设备每10秒显示一次平均温度。

UITableView

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

3 个答案:

答案 0 :(得分:2)

除了其他答案外,您可能还想使用IIR过滤器来获取Exponential moving averagefilter that applies weighting factors which decrease exponentially,因此最后一个值比旧值具有更大的影响力

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

其中alpha是一个很小的值,例如0.1,与时间/常数的减小有关

答案 1 :(得分:1)

保留总计,并记录所记录的温度数。然后,在每次报告答案时,将总和除以计数,以免增加浮点错误。

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))

答案 2 :(得分:0)

我们将需要两个变量

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