Python 中 PERT 分布的随机值

tur*_*n32 3 python random statistics distribution

我想在 Python 中从 PERT 分布生成 10,000 个随机值,该分布具有以下参数 low=6898.5、peak= 7338.93、high=7705.87

我怎样才能做到这一点?

Sam*_*son 7

如果您只想使用标准库,您可以执行以下操作:

from random import betavariate

def pert(a, b, c, *, lamb=4):
    r = c - a
    alpha = 1 + lamb * (b - a) / r
    beta = 1 + lamb * (c - b) / r
    return a + betavariate(alpha, beta) * r

arr = [pert(6898.5, 7338.93, 7705.87) for _ in range(10_000)]
Run Code Online (Sandbox Code Playgroud)

使用 Numpy 基本相同:

import numpy as np

def pert(a, b, c, *, size=1, lamb=4):
    r = c - a
    alpha = 1 + lamb * (b - a) / r
    beta = 1 + lamb * (c - b) / r
    return a + np.random.beta(alpha, beta, size=size) * r

arr = pert(6898.5, 7338.93, 7705.87, size=10_000)
Run Code Online (Sandbox Code Playgroud)

但速度快了大约 20 倍(20 毫秒 vs 0.8 毫秒)。

其中任何一个都可以用来生成与 Severin 类似的图,例如:

通过 Seaborn 的 KDE