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

如何加速Monte Carlo模拟运行?Python代码优化求助

优化Monte Carlo模拟的关键改进点

你的代码存在效率瓶颈与逻辑错误,导致模拟结果不正确且运行缓慢,以下是具体优化方案:

1. 修正核心逻辑错误

当前while循环每次都会覆盖results变量,最终仅保留最后一批1000个模拟值,完全未累积所有10万次(或更多)的模拟结果,这是最严重的问题。

2. 用向量化计算替代Python循环

Python原生循环与random模块的单值生成效率极低,改用NumPy向量化操作可将速度提升数倍:

  • 直接用np.random.randint一次性生成所有随机数,避免逐个生成的开销
  • 基于数组批量计算所有结果,无需反复调用函数

3. 提前预计算常数项

steadystate函数内的所有参数(p、Cout等)均为固定值,提前计算分子、分母的常数部分,避免每次模拟重复计算。

4. 移除不必要的打印操作

print(results)会输出大数组到控制台,严重拖慢运行速度,调试完成后务必移除。

优化后的代码示例

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

# 设置总模拟次数
total_runs = 100000

# 预计算所有固定参数
p = 0.88
Cout = 4700000000
LambdaAER = 0.72
Vol = 44.5
Depo = 0.42
Uptime = 0.1
Effic = 0.38
Recirc = 4.3

# 提前计算分子固定部分与分母
numerator_const = p * Cout * LambdaAER
denominator = LambdaAER + Depo + (Uptime * Effic * Recirc)

# 一次性生成所有随机数
x = np.random.randint(86900000, 2230000000000, size=total_runs)

# 批量计算所有浓度值
conc = (numerator_const + (x / Vol)) / denominator

# 绘制分布
ax = sns.distplot(conc,
                  bins=100,
                  kde=True,
                  color='skyblue',
                  hist_kws={"linewidth": 15, 'alpha': 1})
ax.set(xlabel='Uniform Distribution ', ylabel='Frequency')
plt.show()

额外优化建议

  • 若需超大规模模拟(如100万次以上),可使用numba库对计算逻辑进行JIT编译,进一步提升速度
  • 仅导入实际用到的模块(你当前未使用scipy.stats、pandas,可暂时注释以减少加载开销)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38