【问题标题】:How to generate a random normal distribution with specific standard deviation如何生成具有特定标准偏差的随机正态分布
【发布时间】:2020-06-17 23:03:44
【问题描述】:

这个功能我已经用过了:

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;

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 那么我该如何解决这个问题?如何使它只给出 [-1, 1] 范围内的值?
  • 您可以进一步降低标准差(0.5、0.3、0.25 等)。但同样,这并不意味着你永远不会得到 [-1,1] 之外的值。有可能您仍然可以,但随着您降低标准差,这种可能性会变小。
【解决方案2】:

只是添加到之前的评论和回答:

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

【讨论】:

  • 我不想要统一的数字,我希望它是正态分布的,但只有 std 为 1
  • 然后您还将绘制在 -1, 1 之外的值。正态分布的界限是 +- 无穷大。作为一种解决方法,您可以扩展您的代码以丢弃您的区间之外的任何值,并可能绘制一个新值来替换它。但是,结果数字不会服从正态分布
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多