📅  最后修改于: 2023-12-03 15:27:34.343000             🧑  作者: Mango
这是一个生成N个符合正态分布的随机数的问题,其中标准偏差是确定分布形态的因素之一。该问题可以用概率统计学中的Box-Muller变换实现。
Box-Muller变换是一个基于极坐标系的转换算法,可以将标准正态分布的随机数转换为任意均值和标准偏差的正态分布随机数。具体实现可参考以下的Python代码:
import math
import random
def box_muller(n, mu=0, sigma=1):
"""
Generate n random numbers following normal distribution.
"""
res = []
for i in range(n):
u1 = random.random()
u2 = random.random()
z1 = math.sqrt(-2 * math.log(u1)) * math.cos(2 * math.pi * u2)
x1 = mu + z1 * sigma
res.append(x1)
return res
其中,参数n
是需要生成的随机数个数,mu
是期望值(默认为0),sigma
是标准偏差(默认为1)。
以下是一个使用示例:
import matplotlib.pyplot as plt
# Generate 1000 random numbers following normal distribution.
data = box_muller(1000, mu=10, sigma=2)
# Plot the histogram.
plt.hist(data, bins=30)
plt.show()
该代码将生成1000个均值为10,标准偏差为2的正态分布的随机数,并绘制它们的直方图。结果如下图所示:
该函数将返回一个长度为n
的数组,其中每个元素对应一个随机数的值。