我正在使用距离传感器在树莓派上开发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/

10-12 22:04