我想生成随机数,让我们说100.现在我正在使用numpy,例如:
print numpy.random.normal(loc=200,scale=50,size=100)
但我希望数字只能产生一个标准偏差,而不是平均值,即loc。什么是最好的方式?
我应该简单地做一些事情:
print numpy.random.randint(150, high=250, size=100)
还是有其他办法吗?
答案 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()
我们每次都选择一个点并不重要。例如。使用n=3
会导致: