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

使用scipy.stats.bernoulli模拟1/3概率与构造均匀离散分布是否可行

结论

仅使用scipy.stats提供的bernoulli相关函数完全可以实现你提到的所有需求,具体实现逻辑如下:


1. 模拟1/3概率的伯努利分布

该需求属于bernoulli函数的原生支持能力,直接设置分布参数p=1/3即可,生成的随机变量取1的概率为1/3,取0的概率为2/3:

from scipy.stats import bernoulli
# 生成1000个服从p=1/3伯努利分布的样本
samples = bernoulli.rvs(p=1/3, size=1000)

2. 仅借助bernoulli.rvs()复现p=0.5的公平抛硬币

可以用冯·诺依曼去偏算法实现,哪怕你不直接设置p=0.5,仅用任意固定偏置的伯努利生成器也能得到公平抛硬币结果:

  • 连续调用两次bernoulli.rvs()得到两个结果
  • 如果两次结果为(0,1),输出0;如果为(1,0),输出1
  • 如果两次结果为(0,0)或(1,1),丢弃本次结果,重复上述步骤

该方法得到的0和1的概率严格等于50%,符合公平抛硬币要求。
示例代码:

def fair_coin():
    while True:
        # 用任意非0/1的p参数都可以
        a = bernoulli.rvs(p=1/3)
        b = bernoulli.rvs(p=1/3)
        if a != b:
            return a

3. 生成0、1、2的均匀离散分布

可以基于上述公平抛硬币的结果用拒绝采样实现:

  • 用公平硬币生成2位二进制数,对应十进制的0~3
  • 如果生成的结果是3,丢弃重抽
  • 剩下的0、1、2三个结果概率完全相等,均为1/3

示例代码:

def uniform_012():
    while True:
        bit0 = fair_coin()
        bit1 = fair_coin()
        num = bit1 * 2 + bit0
        if num < 3:
            return num

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:45:04