我希望在Python中从PERT分布中生成10,000个随机值,该分布具有以下参数: low=6898.5、peak= 7338.93、high=7705.87
我该怎么做呢?
发布于 2021-07-23 01:44:09
如果你只想使用标准库,你可以这样做:
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倍(20ms vs 0.8ms)。
这两种方法都可以用来生成与Severin类似的图,例如:
https://stackoverflow.com/questions/68476485
复制相似问题