我目前有一个移动平均线使用的清单,工作,但想看看是否有一个更快的方法来完成这一点。你知道吗
strut[i].cpsi = round(bit2UntrimPSI(i) + float(strut[i].trim), 0)
strut[i].rpsi.append([time.time(), strut[i].cpsi])
while strut[i].rpsi[0][0] <= time.time() - apsiTimeWindow:
del strut[i].rpsi[0]
strut[i].apsi = mean([n[1] for n in strut[i].rpsi])
我试图用Numpy的cumsum函数来完成这个任务,但我唯一的问题是数组的大小是恒定的,据我所知,不能被时间控制。下面就是这个例子。你知道吗
def running_mean(x, N):
cumsum = numpy.cumsum(numpy.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N]) / float(N)
对于这样的问题,您需要一个两边都可以有效扩展或截断的数据结构。Python
list
在最后是有效的,但在开始时不是。一个deque是一个更好的选择。我不清楚你的大问题,不足以用你的精确代码来构建一个演示,但这里有一个演示,演示了在需要获取更多值、丢弃太旧的值,然后计算幸存值的平均值的情况下使用deque
的想法。你知道吗相关问题 更多 >
编程相关推荐