📜  给定N和标准偏差,找到N个元素(1)

📅  最后修改于: 2023-12-03 15:27:34.343000             🧑  作者: Mango

给定N和标准偏差,找到N个元素

这是一个生成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的正态分布的随机数,并绘制它们的直方图。结果如下图所示:

normal distribution example

返回值

该函数将返回一个长度为n的数组,其中每个元素对应一个随机数的值。