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