我是numpy的新手,最近我对random.normal方法感到非常困惑 我想生成一个2乘2的矩阵,其中均值为零所以我写了以下内容,但是,你可以看到abs(0 - np.mean(b))< 0.01行输出错误,为什么?我希望它输出True。
>>> 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 :(得分:0)
从正态分布中采样并不能保证样本的均值与正态分布的均值相同。如果你采用无数个样本,它应该具有相同的均值(通过中心极限定理),但显然,你不能真正采用无数个样本。
答案 1 :(得分:0)
如果您需要生成器,则需要手动将mean和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