Python 为什么numpy.random.normal(0,1,N)的结果不';不等于0?

Python 为什么numpy.random.normal(0,1,N)的结果不';不等于0?,python,numpy,random,Python,Numpy,Random,为什么numpy.random.normal(0,1,N)的结果加起来不等于0?生成的分布的实际平均值不是0。我认为这不是因为离散化,因为平均值从0的偏移量似乎不会随着N的增长而变小。我确实尝试过真正挑战我的机器的Ns。我错过了什么 我用它来产生一个随机的噪音,添加到模拟信号中。我依赖于这样一个事实,所有噪声信号的和将接近只有信号的和,因为所有的随机值加起来应该是0。取而代之的是信号加上平均值中的偏移量乘以点数。采样平均值并不总是与理论平均值相同。 但是,当样本量变大时,差异就会变小 请参阅代码

为什么numpy.random.normal(0,1,N)的结果加起来不等于0?生成的分布的实际平均值不是0。我认为这不是因为离散化,因为平均值从0的偏移量似乎不会随着N的增长而变小。我确实尝试过真正挑战我的机器的Ns。我错过了什么


我用它来产生一个随机的噪音,添加到模拟信号中。我依赖于这样一个事实,所有噪声信号的和将接近只有信号的和,因为所有的随机值加起来应该是0。取而代之的是信号加上平均值中的偏移量乘以点数。

采样平均值并不总是与理论平均值相同。 但是,当样本量变大时,差异就会变小

请参阅代码

import numpy as np
print(np.random.normal(0, 1, 100).mean()) # 0.08
print(np.random.normal(0, 1, 1000).mean()) # -0.03
print(np.random.normal(0, 1, 10000).mean()) # -0.004
print(np.random.normal(0, 1, 100000).mean()) # 0.0014

想象一些简单的情况:

  • N=1:几乎不可能精确到零,偶尔你会接近零
  • N=2:无论第一个数得到什么,最好希望第二个数正好相反。通常不会发生,如果发生的话也不会是随机的
  • N=3:一旦得到前两个,现在需要第三个数字的特定值来抵消前两个。祝你好运

我想你知道这是怎么回事。如果你需要一个特定的总和,你需要通过减少至少一个值的随机性来加强它。

该理论认为正态样本平均值的标准偏差等于sigma/sqrt(n),其中n是样本的大小,sigma是正态分布的标准偏差。正如@Gilseung所说,他的答案是,当样本大小增加时,平均值会接近0。

为什么会这样?这是随机的…有趣的是,输入参数没有被认真对待。N需要太大,才能使平均值接近0。另外,生成的数组的和总是随着N的增长而增长,因为平均值中的偏移量不会随着N的增长而减少,我确实需要这个和。例如,当N=1e9时,平均值将为~1e-6,我不会称之为小。请注意,这样的调用将生成一个占用8GB内存的数组!无论如何,很明显如何解决这个问题,我想要求精确的平均值与随机性的要求背道而驰,反之亦然。只是一些需要注意的事情。