考虑一个小型监控设备,该设备每10秒显示一次平均温度。
UITableView
如何在不增加内存占用的情况下计算和更新平均值。也就是说,不可能进行整个数据存储(永久或内存)
答案 0 :(得分:2)
除了其他答案外,您可能还想使用IIR过滤器来获取Exponential moving average:filter 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
....
....