我正在尝试构建一种电池电量计,其中有一个程序可以收集电压样本并将其添加到阵列中。我的想法是,当电池充满时,我会收集大量数据,然后构建一个函数,将这些数据与最近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
答案 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