如何生成具有特定标准偏差的随机正态分布

时间:2020-03-05 10:30:44

标签: python numpy statistics normal-distribution standard-deviation

我已经使用了此功能:

np.random.seed(40)
np.random.normal(loc = 0, scale = 1, size = 10)

但是,我假设值应该在1到-1之间,对吗? 但是我得到的值大于1且小于-1。那怎么可能?

我得到了这个数组:

array([-0.6075477 , -0.12613641, -0.68460636,  0.92871475, -1.84440103,
       -0.46700242,  2.29249034,  0.48881005,  0.71026699,  1.05553444])

您会看到类似2.2924的值以及-1.8,这是超出标准偏差的范围

可能的解决方案

我已经编写了此代码,可以吗?

final_data = []
count = 0
a = 26 # standard deviation
b = 157 # mean

for i in range(2000):
    y = a*np.random.normal(0, 1, 1) + b # equation to multiply by the std and add the mean
    if y <= upper and y >= lower :
        final_data.append(y[0])
        count += 1
        if count > 608:
            break;

其中上下分别是平均值+ std和平均值-std。 我首先生成了一个随机分布的数字,然后将其放入等式中。如果数字在特定范围之间,那么我将其添加到列表中

2 个答案:

答案 0 :(得分:2)

正态分布不限制值的范围。这仅意味着68%的值将在平均值的1个标准差之内; 2个标准偏差内的偏差为95%,3个标准偏差内的偏差为99.7%。 理论上,无论标准偏差如何,您都可以从-无限到无穷大获得任何值。

答案 1 :(得分:1)

只需添加到上一个评论并回答:

如果要从间隔中绘制随机数,则必须选择具有上限和下限的分布。例如,均匀分布使上下限之间的每个数字具有相等的概率。对于numpy,您可以在此处查看:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.uniform.html