2017-10-15 10 views
1

更新**Pythonの期待値

期待値E [x^2]を返すように取り組んでいます。私はすでに平均値muとsigma2で標準値をサンプリングするために関数に作成しました。私はこの関数を使って通常の値を生成し、次にの値にそれぞれfunを適用したいと思います。私のループで期待値を定義してからfunを適用する必要がありますか?各xについてx^2を見つけたら平均を取ることができますか?ここで私が取り組んできたものだ:

def fun(x): 
    y=x**2 
    return y 

def EV(fun,n_samples,mu,sigma2): 
     for i in range(1,n_samples): 

... U = np.random.uniform(0,1,1) ... output.append(フロート(Y)) ...出力を返す

+0

'fun'は単なる関数です。あなたは 'response.append(fun(normal(n_samples、mu、sigma2))'を置くことができます。それはあなたの質問ですか? 'i'は' normal'で使われていないので、ループに入れる必要はありません。 –

答えて

2

あなたは、正規分布乱数の二乗の期待値を見積もって、モンテカルロ実験を行っています。これを行うには、擬似乱数の偏差の平方和を累積し、それらの数で除算するだけでよい。

>>> import random 
>>> n_samples = 100 
>>> sum_x_2 = 0 
>>> for i in range(n_samples): 
...  sum_x_2 += random.normalvariate(0,1)**2 
...  
>>> estimate = sum_x_2/n_samples 
>>> estimate 
1.045308497590742 

標準偏差を使用しました。

これをPythonで行う別の方法は、コンピュータ代数を実行しようとするライブラリを使用することです。

>>> from sympy.stats import E, Normal 
>>> Z = Normal('Z', 0, 1) 
>>> E(Z**2) 
1 

モンテカルロはあまりサンプルを許可しなかったので、それほど悪くはありませんでした。

関連する問題