python - 在 Python 中模拟抛硬币实验

标签 python arrays algorithm random

我无法让程序正常运行。目标是模拟如下抛硬币:

考虑一个随机数字序列:epsilon_1, epsilon_2, ... , epsilon_N。此序列中的每一项取值 +1-1,具体取决于抛硬币实验的结果,分别是正面或反面。

换句话说,对于每个 n = 1,2,...,N:

epsilon_n = { +1 概率 = 1/2;和 -1,概率 = 1/2。

现在,我写了一些伪代码来帮助我编写这个程序:

# for n = 1,2,...,N:
# flip coin
# if result == "Heads"
    # epsilon_{n} = 1
# else:
    # epsilon_{n} = -1

我想将每个 n 的 epsilon 值(因此,每个 n 的实验结果)存储在一个数组中。这是我编写的程序,希望能实现这一点:

    # array to store outcome of the coin flip
epsilon = np.zeros(N)

# define coin flip experiment
result = [] # result of the experiment
for n in xrange(1, N):
    def coin_flip(): #flip coin for each n = 1,...,N
        flip = random.randint(0,2) 
        if (flip == 0):
            result = "Heads"
        else:
            result = "Tails"
        return result
    if result == "Heads":
        epsilon[n] = 1
    else:
        epsilon[n] = -1

print epsilon

这个程序的输出是一个数组,第一个条目是0,所有其他条目包含值-1。我指定了 N = 100

拜托,我只需要一些指导。例如,我认为我在为抛硬币实验定义函数方面走在了正确的轨道上。我需要它返回实验结果(正面或反面),并且每个 n = 0,1,...,N 都需要这样做,但我不确定最好的方法这样做。然后,对于每次抛硬币的结果,我的程序必须将值 +1-1 存储在 epsilon 的数组中。我必须将 n 作为我提议的函数的参数吗?我走在正确的轨道上吗?

非常感谢任何帮助。提前致谢!

编辑:所以我只是想指出我没有忘记导入像 numpy 和 random 这样的库。这些包含在我的原始代码中,但这实际上是一个更大程序的一部分,所以当我复制并粘贴这段代码时,import randomimport numpy 被留下了出

最佳答案

您的代码中有几个错误。首先,您正在创建一个名为 result 的空列表,但稍后在您的代码中 result 是一个字符串。所以你不需要那部分。

import numpy as np
import random
N = 10
epsilon = np.zeros(N)

这将创建一个长度为 N 的数组供您存储结果。现在,您的主要错误在循环中。您应该在循环外定义该函数并在每次迭代中调用它:

def coin_flip(): #flip coin for each n = 1,...,N
    flip = random.randint(0, 1) 
    if (flip == 0):
        result = "Heads"
    else:
        result = "Tails"
    return result

请注意,我将第一行更改为 random.randint(0, 1),因为它包含两端。现在,如果您运行 coin_flip(),它将返回“正面”或“反面”。 相应地改变你的循环:

for n in xrange(N):
    result = coin_flip()
    if result == "Heads":
        epsilon[n] = 1
    else:
        epsilon[n] = -1

这是您修改 epsilon 数组的地方。请注意,在每次迭代中,我都会调用 coin_flip() 函数并将其分配给 result

现在打印 epsilon 将为您提供如下数组:

array([ 1.,  1.,  1., -1., -1.,  1., -1., -1., -1., -1.])

这是一条很长的路要走。相反,您可以这样做(使用随机库):

[random.choice([1, -1]) for _ in range(N)]
Out[19]: [1, 1, 1, 1, 1, -1, 1, 1, -1, -1]

或者(使用 numpy):

np.random.choice([1, -1], N)
Out[20]: array([ 1,  1,  1,  1, -1, -1, -1, -1, -1, -1])

关于python - 在 Python 中模拟抛硬币实验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38296039/

相关文章:

c++ - 指向指针 : managing strings for different languages 的指针数组

arrays - Swift 过滤数组中的自定义对象

c# - C# 和 VB.Net 中数组的起始索引

c++ - 当算法需要零秒/毫秒时间时,如何获得近似时间?

c++ - 从十进制转换为最多n位的二进制数字

c++ - 如何使用哈希表在最小堆上实现 O(1) 删除

python - 当我提前知道它的长度时,我可以加快可迭代类的速度吗?

python - 如何在行为步骤实现中显式失败该步骤

python - 无法在 Windows 10 上安装 dlib

Python 斜率(给定两个点找到斜率)-答案有效但无效;