2017-06-23 79 views
0

我是numpy的新手,最近我對random.normal方法很困惑 我想生成一個2乘2的矩陣,其中的平均值爲零,所以我寫了以下內容,但是,您可以看到abs( 0 - np.mean(b))< 0.01行輸出錯誤,爲什麼?我期望它輸出True。爲什麼numpy隨機正常產生一個錯誤的隨機矩陣,錯誤的平均值?

>>> 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