获取一个标准差内的随机数

时间:2015-02-21 09:03:00

标签: python-2.7 numpy random normal-distribution

我想生成随机数,让我们说100.现在我正在使用numpy,例如:

print numpy.random.normal(loc=200,scale=50,size=100)

但我希望数字只能产生一个标准偏差,而不是平均值,即loc。什么是最好的方式?

我应该简单地做一些事情:

print numpy.random.randint(150, high=250, size=100)

还是有其他办法吗?

1 个答案:

答案 0 :(得分:3)

<强> numpy.random.randint

  

在“半开”间隔中从“离散均匀”分布中返回随机整数。

<强> numpy.random.normal

  

从正常(高斯)分布中抽取随机样本。

randint()normal() 以相同的方式选择一个数字。使用randint()在所选区间中获取任何数字的几率是相同的,与normal distribution中的数字不同(获得更接近峰值的数字的几率更大)。


要从normal()获取单个号码,只需将size参数保留为无,如documentation中所述。

为确保您的所有数字都在一个标准偏差范围内,您可以使用n=1下面的代码:

import matplotlib.pyplot as plt
import numpy


STANDARD_DEVIATION_VALUE = 50
DISTRIBUTION_CENTER = 200


def single_num(n):
    # Repeats until a number within the scale is found.
    while 1:
        num = numpy.random.normal(loc=DISTRIBUTION_CENTER, scale=STANDARD_DEVIATION_VALUE)

        if abs(DISTRIBUTION_CENTER-num) <= (STANDARD_DEVIATION_VALUE * n):
            return num

# One standard deviation apart.
lst_of_nums = [single_num(n=1) for _ in xrange(1000000)]

plt.hist(lst_of_nums, bins=100)
plt.xlabel("value")
plt.ylabel("frequency")
plt.show()

enter image description here


我们每次都选择一个点并不重要。例如。使用n=3会导致:

enter image description here