Python 计算标准差

Python 计算标准差,python,numpy,statistics,Python,Numpy,Statistics,我需要做一个通过蒙特卡罗方法计算积分的算法,为了模拟的目的,我需要计算程序中生成的样本的标准偏差。 我的问题是,当我增加样本中元素的数量时,我的标准偏差不会像我预期的那样衰减。 首先,我认为我的函数是错误的,但使用numpy预定义函数来计算标准偏差,我发现值是相同的,并且没有像我预期的那样减少。所以我想知道我的样本出了什么问题,所以我进行了以下模拟,以测试标准偏差是否如预期的那样下降: list = [random.uniform(0,1) for i in range(100)] print

我需要做一个通过蒙特卡罗方法计算积分的算法,为了模拟的目的,我需要计算程序中生成的样本的标准偏差。 我的问题是,当我增加样本中元素的数量时,我的标准偏差不会像我预期的那样衰减。 首先,我认为我的函数是错误的,但使用numpy预定义函数来计算标准偏差,我发现值是相同的,并且没有像我预期的那样减少。所以我想知道我的样本出了什么问题,所以我进行了以下模拟,以测试标准偏差是否如预期的那样下降:

list = [random.uniform(0,1) for i in range(100)]
print np.std(list)
得到的标准偏差为0.289

list = [random.uniform(0,1) for i in range(1000)]
print np.std(list)
得到的标准偏差为0.287

当我的n增加时,这不应该减少吗?因为我需要在我的模拟中使用它作为停止标准,并且我在更大的样本中超过它来减少。我的数学概念出了什么问题


提前谢谢

不,您的数学概念没有缺陷,对于较大的n,标准偏差保持不变。 Ahman正确地指出,应该避免对变量名使用保留关键字:list是python保留关键字。改用my_列表或其他变量名


[编辑]由于计算的平均值是随机的,因此误差范围不起作用;您必须计算置信区间,在这种情况下,置信区间是一个概率误差界。您可以在此处查看更多信息:

分布的标准偏差不取决于样本大小。is
(b-a)/sqrt(12)
,其中
a
b
是您的发行限制。在您的情况下,
a=0
b=1
,因此对于任何尺寸的样本,您应该期望
std=1/sqrt(12)=0.288675

也许您正在寻找的是,由
std/sqrt(N)
给出,并将随着样本量的增加而减少:

In [9]: sample = np.random.uniform(0, 1, 100)

In [10]: sample.std()/np.sqrt(sample.size)
Out[10]: 0.029738347511343809

In [11]: sample = np.random.uniform(0, 1, 1000)

In [12]: sample.std()/np.sqrt(sample.size)
Out[12]: 0.0091589707054713591

不要使用
list
作为变量,它是用来制作列表的。那么我应该使用什么呢?阵列?嗯。。。在你的例子中它确实减少了
0.289>0.287
这个问题似乎离题了,因为它属于on或我的朋友,我刚刚计算了2个值。如果我做的次数更多,一些数值甚至更大,因为nOk更大,所以我想用标准偏差和样本均值之间的比率来停止我的模拟。这定义了一个相对误差,这是给定的,我想用它来获得最佳n和积分的最佳估计。既然标准差保持不变,这怎么可能是一个好的标准呢?我已经更改了列表的名称,谢谢。