Python 生成均值为 n 个标准差的随机数

Python Generate Random Numbers with n standard deviations of a mean

我正在处理从正常人群中获得的数值范围,这些数值范围代表与平均值的 +- 2 个标准偏差。异常值是超出 2SD 限制的值。我想生成看起来像人口数据的随机值。因此,我为生成数字的函数提供了一个平均值和 +-2SD 范围,该函数生成了一个看起来像原始人口的完美钟形曲线。因此,例如,进行葡萄糖等实验室测试,参考范围为 60 - 100。这代表通过测试一大群正常人将获得的值。平均值为 80,2SD 范围为 60-100。根据定义,这是总人口的 95%。值可以从低于 50 向上扩展到 500。我想生成适合这些参数的随机数。

我正在玩 numpy 和 scipy 但我不太了解数学。有没有函数可以做到这一点?

np.random.normal 这样做。第一个参数是均值,第二个是标准差 (SD),第三个是要生成的样本数。在您的例子中,均值为 80,SD 为 10。因此,您可以使用以下代码生成 1_000_000 项:

import numpy as np
arr = np.random.normal(80, 10, 1_000_000)

要检查结果在统计上是否正确,您可以使用:

# Example of result: 0.954208 (ie. 95.4% are in the 60-100 range)
((arr > 60) & (arr < 100)).sum() / arr.size

built-in random 模块可以生成正态分布的数字。 normalvariate()取均值和标准差:

import random
from matplotlib import pyplot as plt

plt.hist([random.normalvariate(80, 10) for _ in range(1_000_000)], bins=100)
plt.show()

输出: