python错误:'';TypeError:只有长度为1的数组才能转换为Python标量'';
我正在写蒙蒂霍尔问题的模拟,我一辈子都不明白是什么导致了这个错误。如果你不熟悉monty hall的问题,这是一个假设的游戏秀,有三扇门,一扇门后面有一个奖品,两扇门没有奖品。参赛者选择一扇门,然后主持人打开一扇未获胜的门,让参赛者选择切换或保留原来的选择。最初的选择有1/3的机会是正确的,切换策略有2/3的机会是正确的 我的第一个函数是随机选择两个数组,然后创建第三个数组,即门python错误:'';TypeError:只有长度为1的数组才能转换为Python标量'';,python,numpy,Python,Numpy,我正在写蒙蒂霍尔问题的模拟,我一辈子都不明白是什么导致了这个错误。如果你不熟悉monty hall的问题,这是一个假设的游戏秀,有三扇门,一扇门后面有一个奖品,两扇门没有奖品。参赛者选择一扇门,然后主持人打开一扇未获胜的门,让参赛者选择切换或保留原来的选择。最初的选择有1/3的机会是正确的,切换策略有2/3的机会是正确的 我的第一个函数是随机选择两个数组,然后创建第三个数组,即门 import numpy as np import pandas as pd def reveal_and_sw
import numpy as np
import pandas as pd
def reveal_and_switch(win_door,first_pick):
'''Create arrays for the door to be revealed by the host and the switch door'''
#Take in arrays for the winning door and the contestant's first pick
doors = [1,2,3]
switch_door = np.array([0]*len(win_door))
for i in range(len(switch_door)):
if first_pick[i] != win_door[i]:
switch_door[i] = win_door[i]
else:
del doors[np.searchsorted(doors,first_pick[i])]
switch_door[i] = np.random.choice(doors)
#print switch_door
return switch_door
def create_doors(iterations):
'''Create a DataFrame with columns representing the winning doors,
the picked doors and the doors picked if the player switches and the
accumulating probabilities'''
win_door = np.random.random_integers(1,3,iterations)
first_pick = np.random.random_integers(1,3,iterations)
switch_door = reveal_and_switch(win_door,first_pick)
#allocate memory for
denom = np.array([0]*len(win_door))
first_win = np.array([0]*len(win_door))
switch_win = np.array([0]*len(win_door))
switch_prob = np.array([0]*len(win_door))
stay_prob = np.array([0]*len(win_door))
for i in len(range(switch_door)):
denom[i] = i + 1
if switch_door[i] == win_door[i]:
switch_win[i] = 1
first_win[i] = 0
elif first_pick[i] == win_door[i]:
switch_win[i] = 0
first_win[i] = 1
switch_prob = np.cumsum(switch_win)/denom
stay_prob = np.cumsum(first_win)/denom
df = pd.DataFrame({'iterations': iterations,
'Stubborn Win': first_win,
'Switch Win': switch_win,
'stubborn probability': stay_prob,
'switch probability': switch_prob})
print df
return df
当我调用create_doors(10)时,我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 14, in create_doors
TypeError: only length-1 arrays can be converted to Python scalars
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第14行,在“创建门”中
TypeError:只有长度为1的数组才能转换为Python标量
重现这样的错误:
In [32]: a
Out[32]: array([0, 1, 2])
In [33]: range(a)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-33-5515275ab580> in <module>()
----> 1 range(a)
TypeError: only length-1 arrays can be converted to Python scalars
可以简化:
denom=np.zeros_like(win_door)
first_win = denom.copy()
非常感谢!你太棒了!
denom=np.zeros_like(win_door)
first_win = denom.copy()