2017-06-23 8 views
0

私はnumpyの初心者ですが、最近私はrandom.normalメソッドで非常に混乱しています 平均がゼロの2行2列の行列を生成したいので、次のように書いています。 0 - np.mean(b))< 0.01ライン出力False、なぜですか?私はそれがTrueを出力すると期待しています。なぜnumpy random normalが間違った平均値を持つ間違ったランダムな行列を生成したのですか?

>>> import numpy as np 
>>> b = np.random.normal(0.0, 1.0, (2,2)) 
>>> b 
array([[-1.44446094, -0.3655891 ], 
    [-1.15680584, -0.56890335]]) 
>>> abs(0 - np.mean(b)) < 0.01 
False 
+0

それはランダムです。なぜその平均は特定の価値ですか?特にわずか4サンプルでは? – spectras

+0

@spectrasなので、このAPIはサイズが小さい場合に指定した平均値の結果を保証できません。 –

+0

ルックアップ*分散*。分布の平均からあなたのサンプルの平均が逸れる可能性があることを教えてくれます。サンプルサイズはパラメータです! –

答えて

0

正規分布からのサンプリングは、サンプルの平均が正規分布の平均と同じであることを保証しません。無限の数のサンプルを取る場合、同じ平均値を持つべきです(中央極限定理を介して)が、明らかに無限のサンプル数を取ることはできません。

+0

私はAPIを完全に誤解していました。プールからサンプリングし、固定サイズのプールを生成しません。 –

0

あなたが発電をしたい場合は、手動であなたの期待値と平均値とstdを修正する必要があります:

def normal_gen(m, s, shape=(2,2)): 
    b = np.random.normal(0, s, shape) 
    b = (b - np.mean(b)) * (s/np.std(b)) + m 
    return b 
関連する問題