Introduction
- 表題のとおり、リストの平均値・分散・標準偏差を計算するコードを書いてみました。
- 勉強のためのコーディングです。実用目的ならNumpyを利用すべきかと思います。
- 組み込み関数やリスト内包表記、クラスの導入などいろいろ試してみました。
コードと実行結果
class Analystic:
def __init__(self):
pass
def average(self, ls):
return(sum(ls)/len(ls))
def dispersion(self, ls):
ave = self.average(ls)
return(sum([(x-ave)**2 for x in ls]) / len(ls))
def stddev(self, ls):
return(self.dispersion(ls)**0.5)
def main():
ls = [4,5,6]
a = Analystic()
print(a.average(ls))
print(a.dispersion(ls))
print(a.stddev(ls))
if __name__=='__main__':
main()
5.0
0.6666666666666666
0.816496580927726
コードの説明
Analystic.average
- ここでは平均値はリストの総和÷リストの要素数として計算できます。
- 組み込み関数sum()で総和を、len()で要素数を求めています。
- 一時変数やループを使わずに、サクッと1行で書くことができました(気持ちいい!)
Analystic.dispersion
- リスト内包表記で(各要素数-平均値)の2乗としたリストを生成し、sum()で総和を取っています。
- 一時変数aveを使用した方が、リスト内包表記中でaverage()を実行するよりも、私の環境では10msほど実行時間が早かったです(MacBook Pro, 2.7 GHz Intel Core i5, 16GBメモリ)
Analystic.stddev
- 単純にdispersion()の結果の平方根を取っています。
感想
- わりとシンプルなコードが書けたのではないかと思います。
- 私のようなプログラミング素人でも、サクサクと気持ちよくコードが書けるのもPythonの魅力のひとつではないでしょうか。
- Numpy関数で同じことをした場合の実行時間の比較もやってみたいです(宿題)