如何连续获取一定量值的均值?
How to get the mean of a certain amount of value continuously?
我从串行端口连续接收大量数据,我想每次收到例如 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 个值时取一个平均值,我的问题是最简单的方法是什么?
这是我的代码:
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
请注意,在队列满之前,按原样使用该函数的平均值不会正确。如果需要第一个数据的平均值,需要稍微修改函数。