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

How to generate a random normal distribution with specific 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;

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

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

补充一下之前的评论和回答:

如果你想从一个区间中抽取随机数,你必须选择一个有上限和下限的分布。例如,均匀分布对上限和下限之间的每个数字赋予相同的概率。对于numpy,你可以在这里查看:https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.uniform.html