对于列表中的每个值,运行平均值只是直到该值的所有值的平均值。对于您的示例的精简版本:
>>> tData = [86,87,84,86]
运行平均值为86/1
、(86+87)/2
、(86+87+84)/3
和(86+87+84+86)/4
。
因此,在每个索引处,运行平均值是运行总计,除以 (index + 1)。
您可以通过以下方式获得运行总计accumulate
:
>>> list(accumulate(tData))
[86, 173, 257, 343]
您可以使用以下命令获取(基于 1 的)索引enumerate
:
>>> list(enumerate(accumulate(tData, start=1))
[(1, 86), (2, 73), (3, 257), (4, 343)]
所以,只需划分:
>>> [total / index for index, total in enumerate(accumulate(tData, start=1))]
[86.0, 86.5, 85.66666666666667, 85.75]
或statistics
在 Python 3.4 或其stats
3.1-3.3 的反向端口/前身中使用:
>>> from stats import running_average
>>> running_average(tData)
[86, 86.5, 85.66666666666667, 85.75]
当然,如果您愿意,您可以随时明确地执行此操作:
>>> running_sum, running_sums = 0, []
>>> for value in tData:
... running_sum += value
... running_sum.append(running_sum)
>>> [value / index for index, value in enumerate(running_sums, start=1)]
[86, 86.5, 85.66666666666667, 85.75]
… 甚至:
>>> running_sum, running_averages = 0, []
>>> for index, value in enumerate(tData, start=1):
... running_sum += value
... running_averages.append(running_sum / index)
>>> running_averages
[86, 86.5, 85.66666666666667, 85.75]