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

简化Monte Carlo模拟多颗10面骰子求和及直方图绘制的Python代码

简洁的多颗10面骰子蒙特卡洛模拟实现

核心优化思路

用向量式运算替代逐次循环,把模拟次数、骰子数量、骰子面数设为可配置变量,不管骰子数量增加到多少,代码结构完全不变,彻底解决冗余问题。

完整实现代码

import numpy as np
import matplotlib.pyplot as plt

# 可配置参数,修改这里即可调整模拟规则
num_simulations = 10000
num_dice = 2  # 改成3、4等任意数量都无需修改其他代码
dice_sides = 10

# 生成所有投掷结果:每行对应一次投掷的所有骰子点数
rolls = np.random.randint(1, dice_sides + 1, size=(num_simulations, num_dice))
# 计算每次投掷的点数和
sums = rolls.sum(axis=1)

# 统计各点数和的出现次数
counts, bin_edges = np.histogram(sums, bins=np.arange(num_dice, num_dice * dice_sides + 2))
sum_values = bin_edges[:-1]  # 提取所有可能的点数和取值

# 绘制直方图
plt.bar(sum_values, counts, width=0.8)
plt.xlabel('骰子点数和')
plt.ylabel('出现次数')
plt.title(f'{num_simulations}次投掷{num_dice}颗{dice_sides}面骰子的点数和分布')
plt.xticks(sum_values)
plt.show()

代码优势说明

  • 无冗余硬编码:所有和骰子数量相关的逻辑都由numpy自动处理,新增骰子只需修改num_dice变量
  • 效率更高:numpy的数组运算比Python循环快几个数量级,模拟次数越多优势越明显
  • 扩展性强:可以轻松调整模拟次数、骰子面数,甚至适配非标准骰子的点数范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:04