【问题标题】:Coin Flip with Numpy confusion带有 Numpy 混乱的硬币翻转
【发布时间】:2019-08-23 15:44:37
【问题描述】:

我正在学习 python 和 numpy 等。我正在编写抛硬币的代码,但是我对代码有些困惑。我回顾了课程,但看不到它在哪里解释 为什么以下代码中的 total_sums 等于 2。

tests = np.random.choice([0, 1], size=(int(1e6), 3), p=[0.6, 0.4])
test_sums = tests.sum(axis=1)
(test_sums == 2).mean()

上面的代码我能够正确,除了test_sums == 2,我卡了很长时间。

代码的目的是查看当你掷硬币 3 次时,它会出现一次正面朝上的概率是多少。在这种情况下,正面为 0,反面为 1。有人能告诉我我错过了什么吗?谢谢

【问题讨论】:

  • 由于正面为 0,反面为 1,因此如果它一次落在正面(和两次反面)上,则 3 次试验的总和为 2。
  • 你认为应该是什么,为什么?
  • 好的,这是有道理的。出于某种原因,我在想 1,因为在我的脑海里我在想两个硬币翻转而不是三个。所以因为我错了,我以为我完全误解了 == 2 指的是。谢谢你们的帮助。

标签: python numpy coin-flipping


【解决方案1】:

您在每次试验中翻转 3 次。你正在检查你得到一个头的频率。 1 头意味着,事实上,2 尾。测试 2 个尾巴与测试 1 个头完全相同。

test_sums == 2 经历了一系列的翻转,每次试验都会产生True (1) 或False (0),这取决于三个翻转的总和是否为2。此表达式返回一系列布尔值,标记每个所需的试验 -- 1 headwith a1`。

例如,让我们考虑一组只有 5 次试验(您的代码执行 100 万次),每次 3 次翻转,结果:

tests = [ [0 1 0] [1 1 0] [0 0 0] [0 0 1] [0 0 0] ]

我们现在会得到

test_sums = [ 1 2 0 1 0 ]

(test_sums == 2) 是一个临时变量,如下所示:

[ False True False True False ]

编码为

[ 0 1 0 1 0 ]

...这个系列的平均值是0.4,它将显示为所需的概率。

该系列的算术平均值是该系列中出现1 的概率——也就是说,在该试验系列中,在 3 次翻转中恰好得到 1 个正面的概率。

这样就解决了吗?

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多