You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中生成指定参数的PERT分布随机值

Python生成指定参数PERT分布随机值的实现方案

方法1:使用scipy自带的PERT分布实现(推荐)

  • 依赖要求:scipy >= 1.7.0
  • 实现代码:
import numpy as np
from scipy.stats import pert

# 定义PERT分布参数
low = 6898.5
peak = 7338.93
high = 7705.87
size = 10000

# 生成随机值
samples = pert.rvs(low=low, peak=peak, high=high, size=size)

# 可选:验证生成结果合理性
print(f"生成样本最小值: {np.min(samples):.2f}")
print(f"生成样本最大值: {np.max(samples):.2f}")
print(f"生成样本均值: {np.mean(samples):.2f}")
# PERT理论均值公式:(low + 4*peak + high) / 6,可和实际输出均值对比验证
print(f"理论均值: {(low + 4*peak + high)/6:.2f}")

方法2:手动基于Beta分布实现(无scipy依赖场景)

PERT分布本质是做了位置和尺度变换的Beta分布,默认形状权重为4,无需额外安装scipy,两种实现版本如下:

仅用Python标准库实现版本

import random

low = 6898.5
peak = 7338.93
high = 7705.87
size = 10000
gamma = 4  # PERT分布默认形状参数

# 计算Beta分布的形状参数
range_val = high - low
alpha = 1 + gamma * (peak - low) / range_val
beta = 1 + gamma * (high - peak) / range_val

samples = []
for _ in range(size):
    beta_sample = random.betavariate(alpha, beta)
    pert_sample = low + beta_sample * range_val
    samples.append(pert_sample)

用numpy加速实现版本

import numpy as np

low = 6898.5
peak = 7338.93
high = 7705.87
size = 10000
gamma = 4

range_val = high - low
alpha = 1 + gamma * (peak - low) / range_val
beta = 1 + gamma * (high - peak) / range_val

beta_samples = np.random.beta(alpha, beta, size=size)
samples = low + beta_samples * range_val

内容的提问来源于stack exchange,提问作者turaran32

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 04:33:02