我正在使用距离传感器在树莓派上开发python脚本。
我的代码可以正常工作,并且可以达到一定距离,但是我想避免出现一些误报/误报,因此我想获取最后三个数据的平均值。
这是我的代码:
while True:
distance= misura() # GETTING THE REAL DISTANCE IN CM
print "Distanza : %.2f" % distanza
avg_distance = <something> # <- HERE I NEED SOMETHING ELEGANT
if (avg_distance > 30):
print "NOT PRESENT"
else:
print "PRESENT"
time.sleep(1.5)
我想要一些函数(也许基于列表?),该函数返回最近三个(或n个)距离的平均值
重要:
我不想存储所有值,因为此脚本将运行数日
最佳答案
我会使用collections.deque
。
from collections import deque
SAMPLE = 3
data = deque(maxlen=SAMPLE)
while True:
distance = misura() # GETTING THE REAL DISTANCE IN CM
print "Distanza : %.2f" % distanza
data.append(distance)
avg_distance = sum(data)/SAMPLE # <- HERE I NEED SOMETHING ELEGANT
... # rest as before
双端队列的长度是固定的,因此您只采样最近的三个。如果要更改采样周期,则只需更改一个变量。
如果要在一个紧密的循环中运行此循环(即,删除1.5s睡眠),则可以将总和保存在变量中,以在每个循环中除去O(n)操作(即使这并不是仅3个元素的问题) )。就像是:
total -= data.popleft()
total += distance
data.append(distance)
average = total / 3
关于python - Python-while真循环中三个值的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56339062/