在Python中模拟掷硬币实验
我很难让程序正常工作。目标是模拟投币,如下所示:在Python中模拟掷硬币实验,python,arrays,algorithm,random,Python,Arrays,Algorithm,Random,我很难让程序正常工作。目标是模拟投币,如下所示: array([ 1., 1., 1., -1., -1., 1., -1., -1., -1., -1.]) 考虑一个随机数字序列:epsilon_1,epsilon_2,εN。根据抛硬币实验的结果,该序列中的每个术语的值分别为正面或反面 换句话说,对于每个n=1,2,…,n: epsilon\u n={+1,概率=1/2;-1,概率=1/2。 现在,我编写了一些psuedo代码来帮助我编写这个程序: # for n = 1,2,...,
array([ 1., 1., 1., -1., -1., 1., -1., -1., -1., -1.])
考虑一个随机数字序列:epsilon_1,epsilon_2,εN
。根据抛硬币实验的结果,该序列中的每个术语的值分别为正面或反面
换句话说,对于每个n=1,2,…,n:
epsilon\u n={+1,概率=1/2;-1,概率=1/2。
现在,我编写了一些psuedo代码来帮助我编写这个程序:
# 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
都需要这样做,但我不确定这样做的最佳方法。然后对于每个硬币投掷的结果,我的程序必须在epsilon
的数组中存储值+1
或-1
。我必须将n
作为建议函数的参数吗?我在ri上吗你在这儿吗
非常感谢您的帮助,谢谢
编辑:所以我只想指出我没有忘记导入numpy和random之类的库。这些库包含在我的原始代码中,但这实际上是一个更大程序的一部分,因此当我复制和粘贴这段代码时,
import random
和import 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\u flip()
,它将返回“Heads”或“Tails”。
相应地更改循环:
for n in xrange(N):
result = coin_flip()
if result == "Heads":
epsilon[n] = 1
else:
epsilon[n] = -1
这就是修改epsilon数组的地方。请注意,在每次迭代中,我都调用coin\u flip()
函数并将其分配给结果
现在,打印epsilon将为您提供如下数组:
array([ 1., 1., 1., -1., -1., 1., -1., -1., -1., -1.])
这是一个漫长的过程。相反,您可以(使用随机库):
或(使用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\u flip()
,它将返回“Heads”或“Tails”。
相应地更改循环:
for n in xrange(N):
result = coin_flip()
if result == "Heads":
epsilon[n] = 1
else:
epsilon[n] = -1
这就是修改epsilon数组的地方。请注意,在每次迭代中,我都调用coin\u flip()
函数并将其分配给结果
现在,打印epsilon将为您提供如下数组:
array([ 1., 1., 1., -1., -1., 1., -1., -1., -1., -1.])
这是一个漫长的过程。相反,您可以(使用随机库):
或(使用numpy):
np.random.choice([1,-1],N)
会给你N次翻转(每个翻转的几率为50%)。你是否在避免使用库(锻炼等)?我错误地漏掉了库,因为我在这里发布的代码实际上是一个更大程序的一部分,该程序执行其他操作。我的原始代码导入了适当的库。无论如何,非常感谢!这就是你的建议有效的原因,因为0
从技术上讲不是整数,所以它被排除在间隔[-1,1]之外
?不,这是一个可供选择的列表。如果你键入np.random.choice(['Heads','Tails',N)
它将返回一个Heads
和Tails
数组。如果你键入np.random.choice(['a','b','c',N)
它将以相同的概率选择a,b或c。哦,我的错,我想那是说random.random.random([-1,1],N)
np.random.选择([1,-1],N)
会给你N次翻转(每个翻转的几率为50%)。你是否在避免使用库(锻炼等)?我错误地漏掉了库,因为我在这里发布的代码实际上是一个更大程序的一部分,该程序执行其他操作。我的原始代码导入了适当的库。无论如何,非常感谢!这就是你的建议有效的原因,因为0
从技术上讲不是整数,所以它被排除在间隔[-1,1]之外
?不,这是一个可供选择的列表。如果你键入np.random.choice(['Heads','Tails',N)
它将返回一个Heads
和Tails
数组。如果你键入np.random.choice(['a','b','c',N)
它将以相同的概率选择a,b或c。哦,我的错,我想那是说random.random.random([-1,1],N)
非常感谢您的详细回复!!我回到电脑前会尝试一下谢谢您的详细回复!!我回到电脑前会尝试一下