Python 如何连续得到某一数值的均值?
我不断地从一个串行端口接收大量数据,我想对每次接收到的100个值进行平均,我的问题是最简单的方法是什么 这是我的密码: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
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时都要这样做