我從一個串口不斷收到大量數據,每次收到100個值時,我都想表達一下意思,我的問題是最簡單的方法是什麼?如何持續獲得一定數量的價值?
這裏是我的代碼:
import serial
ser = serial.Serial('COM23', 19200)
while 1 :
var = ser.readline()
fl = float(var)
print(fl)
KeyboardInterrupt
ser.close()
我從一個串口不斷收到大量數據,每次收到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 – karlosss