Python 3.x 在Python中,如何将串行数据分配给多个变量列表,并在指定的持续时间内对它们求平均值?

Python 3.x 在Python中,如何将串行数据分配给多个变量列表,并在指定的持续时间内对它们求平均值?,python-3.x,pyserial,Python 3.x,Pyserial,我从传感器读取连续串行数据。我将其拆分并分配给5个变量——a、b、c、d、e。我试图计算每5秒每个变量的平均值。因为我的传感器是50Hz,所以我的量程是250。我的实现如下。所以,问题是——有没有更好的方法,特别是将时间设置为5秒,而不是假定它等于循环的250倍 a,b,c,d,e = [[] for i in range(5)] for i in range(250): data = ser.readline().decode() #read from sensor msg

我从传感器读取连续串行数据。我将其拆分并分配给5个变量——a、b、c、d、e。我试图计算每5秒每个变量的平均值。因为我的传感器是50Hz,所以我的量程是250。我的实现如下。所以,问题是——有没有更好的方法,特别是将时间设置为5秒,而不是假定它等于循环的250倍

a,b,c,d,e = [[] for i in range(5)]

for i in range(250):
    data = ser.readline().decode() #read from sensor
    msg  = float(data.split(','))
    a.append(msg[0])
    b.append(msg[1])
    c.append(msg[2])
    d.append(msg[3])
    e.append(msg[4])

average_a = sum(a)/len(a)
average_b = sum(b)/len(b)
average_c = sum(c)/len(c)
average_d = sum(d)/len(d)
average_e = sum(e)/len(e)

试试这样的

import datetime
duration = 5 #Collect for 5 seconds
time_start = datetime.datetime.now()
time_end = time_start + datetime.timedelta(seconds=duration)
big_list = [[] for i in range(5)]

#This loops runs for 5 seconds
while datetime.datetime.now() < time_end:
    data = ser.readline().decode() #read from sensor
    #Create a list of floats and append it to a list
    msg = [float(f) for f in data.split(',')]
    for i, m in enumerate(msg):
        big_list[i].append(msg[i])

#Iterate through list of list, and calculate average for each list
for l in big_list:
    print(sum(l)/len(l))

试试这样的

import datetime
duration = 5 #Collect for 5 seconds
time_start = datetime.datetime.now()
time_end = time_start + datetime.timedelta(seconds=duration)
big_list = [[] for i in range(5)]

#This loops runs for 5 seconds
while datetime.datetime.now() < time_end:
    data = ser.readline().decode() #read from sensor
    #Create a list of floats and append it to a list
    msg = [float(f) for f in data.split(',')]
    for i, m in enumerate(msg):
        big_list[i].append(msg[i])

#Iterate through list of list, and calculate average for each list
for l in big_list:
    print(sum(l)/len(l))

谢谢你的回复。你的解决方案比我的好得多。不管怎样,你知道如何做循环随着时间的推移吗?太好了。谢谢:)我刚刚注意到我的代码和你的代码的输出是不同的。大列表是(1,2,3,4,5),(1,2,3,4,5)…你的方法的平均值是3,这不是我想要的。我想要每个元素的平均值,比如a=(1,1,1,…),b=(2,2,2,…),直到e=(5,5,5,…),例如,如果a(1,1,1),a的平均值为0.33。请您告诉我,先生。谢谢,它能按要求工作。顺便说一句,我想把它写入文件,但它一直给我错误-float没有属性write。更新后的代码就是我这样做的方式。你能告诉我如何修复它吗?试着将你的平均值列表写入文件:谢谢你的回复。你的解决方案比我的好得多。不管怎样,你知道如何做循环随着时间的推移吗?太好了。谢谢:)我刚刚注意到我的代码和你的代码的输出是不同的。大列表是(1,2,3,4,5),(1,2,3,4,5)…你的方法的平均值是3,这不是我想要的。我想要每个元素的平均值,比如a=(1,1,1,…),b=(2,2,2,…),直到e=(5,5,5,…),例如,如果a(1,1,1),a的平均值为0.33。请您告诉我,先生。谢谢,它能按要求工作。顺便说一句,我想把它写入文件,但它一直给我错误-float没有属性write。更新后的代码就是我这样做的方式。你能告诉我如何修复它吗?试着将你的平均值列表写入文件: