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

如何计算多项分布各结果概率,获取类似stats.binom.pmf输出的概率数组

你可以通过numpy和scipy工具包快速实现这个需求,具体方法如下:

首先导入依赖库:

import numpy as np
from scipy import stats

实现逻辑

你提到的多项分布是统计N次试验中每个类别出现次数的概率,而你需要的是多次掷骰子的点数总和的概率,更高效的方式是通过离散概率分布的卷积叠加单颗骰子的分布,和你之前用stats.binom.pmf的实现逻辑类似,二项分布本质就是固定二值试验的分布叠加。

具体代码如下:

# 定义单颗骰子的分布:取值范围1~6,每个取值概率相等
single_die = stats.randint(1, 7)
# 提取单颗骰子对应点数1~6的概率数组
pmf_1 = single_die.pmf(np.arange(1, 7))
# 两次卷积得到两颗骰子点数和的概率(和范围2~12)
pmf_2 = np.convolve(pmf_1, pmf_1)
# 三次卷积得到三颗骰子点数和的概率,对应取值范围正好是你需要的3~18
pmf_3 = np.convolve(pmf_2, pmf_1)

# 输出结果,数组索引0对应总点数3,索引15对应总点数18
print(pmf_3)

运行后的输出示例:

array([0.00462963, 0.01388889, 0.02777778, 0.0462963 , 0.06944444,
       0.09722222, 0.11574074, 0.125     , 0.125     , 0.11574074,
       0.09722222, 0.06944444, 0.0462963 , 0.02777778, 0.01388889,
       0.00462963])

如果需要调整掷骰子的次数,只要重复卷积对应次数即可,比枚举所有组合或者调用多项分布统计的效率高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:04