Python 中 PERT 分布的随机值
Random values from a PERT distribution in Python
我想从具有以下参数的 PERT 分布中生成 Python 10,000 个随机值 low=6898.5,peak= 7338.93,high=7705.87
我该怎么做?
使用 PyPi 的 pertdist,Python3.9 Win10 x64
代码
from pert import PERT
import seaborn as sns
low=6898.5
peak=7338.93
high=7705.87
pert = PERT(low, peak, high)
sns.kdeplot(pert.rvs(100000))
生成的图表如下
如果你只想使用标准库,你可以这样做:
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)]
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)
但速度快了大约 20 倍(20 毫秒对 0.8 毫秒)。
其中任何一个都可以用来生成与 Severin 相似的图,例如:
我想从具有以下参数的 PERT 分布中生成 Python 10,000 个随机值 low=6898.5,peak= 7338.93,high=7705.87
我该怎么做?
使用 PyPi 的 pertdist,Python3.9 Win10 x64
代码
from pert import PERT
import seaborn as sns
low=6898.5
peak=7338.93
high=7705.87
pert = PERT(low, peak, high)
sns.kdeplot(pert.rvs(100000))
生成的图表如下
如果你只想使用标准库,你可以这样做:
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)]
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)
但速度快了大约 20 倍(20 毫秒对 0.8 毫秒)。
其中任何一个都可以用来生成与 Severin 相似的图,例如: