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

如何为布尔数组赋值并计算N次抛硬币实验的求和结果

解决硬币抛掷求和问题的几种方法

嘿,我明白你的困扰啦!你已经成功用rand(N).<p得到了区分正反的布尔数组,现在就差把这些true/false转换成对应的-1/2和1/2然后求和对吧?下面给你几种简单直接的实现方式:

方法1:用条件映射直观赋值(推荐)

不管你用的是NumPy还是纯Python,条件赋值都是最容易理解的方式:

  • 如果用NumPy(看起来你大概率是用这个,因为rand(N)是NumPy的常用写法):
    import numpy as np
    N = 100  # 替换成你的抛掷次数
    p = 0.5  # 公平硬币的反面概率
    
    # 生成布尔数组:true=反面,false=正面
    coin_flips = np.random.rand(N) < p
    # 映射为对应的值:反面→-1/2,正面→1/2
    values = np.where(coin_flips, -0.5, 0.5)
    # 计算总和
    total_sum = values.sum()
    
  • 如果用纯Python:
    import random
    N = 100
    p = 0.5
    
    coin_flips = [random.random() < p for _ in range(N)]
    values = [-0.5 if flip else 0.5 for flip in coin_flips]
    total_sum = sum(values)
    

方法2:利用布尔值的数值特性做线性变换

在编程里,true会被当作1,false当作0,我们可以用这个特性做个简洁的数学转换:
要让反面(true=1)对应-1/2,正面(false=0)对应1/2,可以直接用公式x = 0.5 - flip计算每个值,再求和:

# NumPy版本
total_sum = (0.5 - coin_flips).sum()

# 纯Python版本
total_sum = sum(0.5 - flip for flip in coin_flips)

这个方法不用额外生成中间数组,效率更高,代码也更简洁~

你可以试试这两种方法,随便哪种都能完美得到你想要的总和!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:20:30