Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

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