gpt4 book ai didi

python - 简单滚动平均值 - 前几个值

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:58 25 4
gpt4 key购买 nike

我编写了一个简单的滚动平均函数,效果很好。我也不想使用像 numpy 或 pandas 这样的外部库,只是让你知道。

def get_rolling_average(data, period):

rolling = []
for i in range (0, len(data)):

end = i + period
nums = data[i:end]

# if i < (period-1):
# nums = data[0:i+1]
# rolling.append(mean(nums))

if len(nums) == period:
rolling.append(mean(nums))

return rolling

def round_nicely(num, places):
return round(num, places)

def mean(lst):
summ = sum(lst[0:len(lst)])
summ = float(summ)
return round_nicely(summ/len(lst),1)


print("Rolling average!")

xl = [45, 51, 73, 82, 76, 56, 57, 78, 89, 59]
print get_rolling_average(xl, 3)

结果是

Rolling average!
[56.3, 68.7, 77.0, 71.3, 63.0, 63.7, 74.7, 75.3]

但是,如果前几个值小于句点,我想包含它们。在此示例中,只有 45 和 48。

Rolling average!
[45.0, 48.0, 56.3, 68.7, 77.0, 71.3, 63.0, 63.7, 74.7, 75.3]

where
(45)/1 = 45.0
(45 + 51)/2 = 48.0

我不确定最Pythonic的方法来做到这一点。我的大脑有点卡住,我最有凝聚力的尝试是注释掉的三行,但它跳过了一个值。

最佳答案

你很接近。尝试如下修改现有函数。

def get_rolling_average(data, period):

rolling = []

for i in range (0, len(data)):

nums = data[i-period+1:i+1]

if i < period-1:
rolling.append(mean(data[:i+1]))

if (i >= period-1) and (len(nums) == period):
rolling.append(mean(nums))

return rolling

返回:

[45.0, 48.0, 56.3, 68.7, 77.0, 71.3, 63.0, 63.7, 74.7, 75.3]

说明

  • 您想要 i < period-1 的特定逻辑与 i >= period-1 。以这种方式构建你的逻辑。
  • 定义nums = data[i-period:i]使您能够捕获 3 个值的所有分组。

一旦您对此解决方案感到满意,您可能希望了解替代实现,例如itertools , numpy , pandas .

关于python - 简单滚动平均值 - 前几个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com