我想查询特定点的指数加权移动平均线的值。一种低效的方法如下。l
是事件的时间列表,并且queries
有我想要这个平均值的时间。
a=0.01
l = [3,7,10,20,200]
y = [0]*1000
for item in l:
y[int(item)]=1
s = [0]*1000
for i in xrange(1,1000):
s[i] = a*y[i-1]+(1-a)*s[i-1]
queries = [23,68,103]
for q in queries:
print s[q]
输出:
0.0355271185019
0.0226018371526
0.0158992102478
在实践l
中将非常大,并且值的范围l
也将很大。您如何才能更有效地找到有时的值queries
,尤其是在不显式计算潜在巨大列表的情况y
下s
。我需要它在纯 python 中,所以我可以使用 pypy。
是否有可能及时解决问题,
len(l)
而不是max(l)
(假设len(queries) < len(l)
)?