2017-06-23 75 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