Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何连续得到某一数值的均值?_Python_Serial Port_Mean_Pyserial - Fatal编程技术网

Python 如何连续得到某一数值的均值?

Python 如何连续得到某一数值的均值?,python,serial-port,mean,pyserial,Python,Serial Port,Mean,Pyserial,我不断地从一个串行端口接收大量数据,我想对每次接收到的100个值进行平均,我的问题是最简单的方法是什么 这是我的密码: import serial ser = serial.Serial('COM23', 19200) while 1 : var = ser.readline() fl = float(var) print(fl) KeyboardInterrupt ser.close() 与原始代码不同,它可能看起来像这样: import serial

我不断地从一个串行端口接收大量数据,我想对每次接收到的100个值进行平均,我的问题是最简单的方法是什么

这是我的密码:

import serial

ser = serial.Serial('COM23', 19200)

while 1 :

    var = ser.readline()
    fl = float(var)
    print(fl)
    KeyboardInterrupt

ser.close()

与原始代码不同,它可能看起来像这样:

import serial

ser = serial.Serial('COM23', 19200)
meanList = []
counter = 0
total = 0

while 1 :

    var = ser.readline()
    counter += 1
    fl = float(var)
    total += fl
    print(fl)

    if (counter >= 100):
        counter = 0
        meanList.append(total / 100.0)
        total = 0

    KeyboardInterrupt

ser.close()
return meanList

这将在每100次之后为您提供一份包含程序中所有方法的列表。您可以改变周围的数字,以调整您希望取平均值的频率。

更优雅的解决方案是使用固定大小的队列,该队列只包含最后N个项目。在您的情况下,最后100项

N = 100
values = collections.deque(maxlen=N)
当需要计算移动平均值时,可调用以下函数:

def mean(items, size=N):
    return sum(items)/size
将这些想法插入到代码中,可以通过以下方式完成:

import serial

ser = serial.Serial('COM23', 19200)

while 1 :

    var = ser.readline()
    values.append(var)
    # This queue will keep the last 100 items. 
    # ...
    # ...
    # when you need to use the mean...
    print(mean(values))
    # ... the rest of your code    

请注意,在队列已满之前,按原样使用函数的平均值是不正确的。如果您需要第一个数据的平均值,则需要稍微修改该函数。

只要添加一个计数器,每次计数器%100==0时都要这样做