过去1000秒内立即平均值

时间:2017-01-07 15:42:37

标签: c# average

我有一个得分变量,它可以在主循环的每次迭代中增长和缩小。

需要获得过去1000秒内的平均分数。 (也就是说,我需要一个简单的移动平均线)

This question is relevant, but I wouldn't want to keep track of any score values from previous frames.

计算平均值最直接的方法是保留一个分数列表,并与记录分数的时间戳配对。

每一帧,我们遍历列表,总结score*deltaTime,其中deltaTime计算为(ourTimestamp - prevTimeStamp) / 1000sec.和的结果是我们过去1000秒的平均值这个框架。 我们将处理列表中的任何旧元素,这些元素的时间戳早于"现在"

上述方法将耗费内存。是否有一种更简单的方法来立即计算平均值,而不保留这个"跟踪列表"?

3 个答案:

答案 0 :(得分:7)

  

上述方法将耗费内存。

正确。

  

是否有更简单的方法可以立即计算平均值,而不保留此“跟踪列表”?

不。

累积平均有一个更简单的算法,但这是所有时间的平均值,而不是过去1000秒的平均值。最后1000秒的平均值是简单移动平均值,您需要有历史数据来计算它。

答案 1 :(得分:2)

您可以结合简单移动平均线和累积移动平均线的方法。说你累积一秒钟的所有分数。然后你有1000个项目的常量内存使用+当前秒的一些,你将在下一秒累积。

根据应用程序所需的精度,这可能就足够了。

答案 2 :(得分:1)

正如埃里克写的没有,但你可以估算你需要减去你总和的价值。这不是100%正确,但如果您不需要确切的结果,它可能会很方便。

对于前。

RSQLite