""" Moving Average returns a float so no integer rounding applied """ class mAvg(): def __init__(self, size): self.size = size self.data = [0] * size self.nval = 0 self.sum = 0 self.next = 0 def addVal(self, value): # add a new value und return new current avg if self.nval < self.size: # list is not filled self.nval += 1 self.sum += value else: # list is filled self.sum = self.sum - self.data[self.next] - value self.data.[self.next] = value self.next += 1 # if end of list reached, start over from beginning if self.next = self.size: self.next = 0 return self.sum / self.nval def getAvg(self, points=None): if self.nval == 0: return None # get avg of all collected data if not points: return self.sum / self.nval # get avg of subset if points > self.nval: return None sum = 0 i = self.next p = points while p > 0: p -= 1 if i == 0: i = self.size - 1 else: i -= 1 sum += self.data[i] return sum / points def reset(self): self.nval = 0 self.next = 0 self.sum = 0