pythonで逐次入力に対して移動平均を計算するためのクラス
pythonで、逐次入力に対して移動平均を計算する。
移動平均幅は、コンストラクタの引数に与えておく。
以下、ソース。
# -*- coding: utf-8 -*- class MovingAverage: """逐次入力に対して移動平均を計算するためのクラス""" def __init__(self,size): # コンストラクタ self.pc = 0 self.data=[0]*size #リングバッファとして使う self.size=size self.full=False def put(self,value): self.data[self.pc]=value self.pc=self.pc+1 if self.pc==self.size: self.pc = 0 self.full=True return self.full def print(self): #デバッグ向けリングバッファの中身確認用 print(self.data) def average(self): if self.full: return sum(self.data)/self.size else: #入力が足りないときにも一応値を返してみる。 return sum(self.data)/self.pc def main(): mv2=MovingAverage(3) mv2.put(4) mv2.print() print(mv2.average()) mv2.put(5) mv2.print() print(mv2.average()) mv2.put(6) mv2.print() print(mv2.average()) mv2.put(7) mv2.print() print(mv2.average()) if __name__== '__main__': main()
実行結果
C:\Python34>C:\Python34\python.exe C:\Python34\movingaverageclass.py [4, 0, 0] 4.0 [4, 5, 0] 4.5 [4, 5, 6] 5.0 [7, 5, 6] 6.0