如何在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
相关产品推荐
相关产品推荐

