Python:有没有办法获取数组中n个最新数字的平均值?

时间:2019-07-19 11:18:45

标签: python arrays numpy

我正在尝试构建一种电池电量计,其中有一个程序可以收集电压样本并将其添加到阵列中。我的想法是,当电池充满时,我会收集大量数据,然后构建一个函数,将这些数据与最近100次左右的电压读数的平均值进行比较,因为每隔几秒钟就会添加一次新的读数因为我不会打扰这个过程。

我正在使用matplotlib来显示电压输出,到目前为止,它工作正常:I posted an answer here on live changing graphs

电压功能如下:

pullData = open("dynamicgraph.txt","r").read() //values are stored here in another function
    dataArray = pullData.split('\n')
    xar = []
    yar = []

    averagevoltage = 0
    for eachLine in dataArray:
        if len(eachLine)>=19:
            x,y = eachLine.split(',')
            xar.append(np.int64(x)) //a datetime value
            yar.append(float(y))    //the reading 
    ax1.clear()
    ax1.plot(xar,yar)
    ax1.set_ylim(ymin=25,ymax=29)
    if len(yar) > 1:
        plt.title("Voltage: " + str(yar [-1]) + " Average voltage: "+ str(np.mean(yar)))

我只是想知道获取数组最后x个数字的平均值的语法是什么样子?

if len(yar) > 100
    #get average of last 100 values only

4 个答案:

答案 0 :(得分:2)

使用带有负索引的切片符号来获取列表中的n个最后一项。

yar[-100:]

如果切片大于列表,则将返回整个列表。

答案 1 :(得分:2)

这是一个相当简单的问题。假设您使用的numpy提供了简单的求平均值功能。

array = np.random.rand(200, 1)

last100 = array[-100:]  # Retrieve last 100 entries
print(np.average(last100))  # Get the average of them

如果要将常规数组转换为numpy数组,可以执行以下操作:

np.array(<your-array-goes-here>)

答案 2 :(得分:0)

我认为您甚至不需要使用numpy。您可以通过如下分割数组来访问最后100个元素:

l = yar[-100:]

这将返回从-100(最后一个元素“第100个”)到-1(最后一个元素)的索引处的所有元素。然后,您可以按照以下方式使用本机Python函数。

mean = sum(l) / len(l)

Sum(x)返回列表中所有值的总和,len(l)返回列表的长度。

答案 3 :(得分:0)

您可以使用Python标准库statistics

imports