所以我想做的是计算两个相同头数的抛硬币的几率。要求之一是,我通过模拟1000个N抛硬币系列来做到这一点,用户可以选择1个系列中抛硬币的数量。但是,我遇到了模拟问题:
import numpy as np
user_series = int(input("How many series?"))
pairs = 0
tosses = 0
pair1_list = []
pair2_list = []
while tosses < 1000:
pair1 = np.random.randint(1, 2, size = user_series)
if pair1 == 1:
pair1_list.append("H")
elif pair1 == 2:
pair1_list.append("T")
pair2 = np.random.randint(1,2, size = user_series)
if pair2 == 1:
pair2_list.append("H")
elif pair2 == 2:
pair2_list.append("T")
tosses += 1
print(pair1_list)
print(pair2_list)
这给了我以下错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我假设if语句有问题,但我不知道如何解决。
答案 0 :(得分:1)
np.random.randint(1, 2, size=5)
返回array([1, 1, 1, 1, 1])
。您不能真正将长度为user_series
的数组与单个值1
或2
进行比较。
请参见https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.randint.html
请注意,根据文档high
,也定义为
...在最大(有符号)整数上方一个...
所以np.random.randint(1, 2, size=5)
将只返回1
。
答案 1 :(得分:0)
import numpy as np
user_series = int(input("How many series?"))
pairs = 0
tosses = 0
pair1_list = []
pair2_list = []
while tosses < 1000:
pair1 = np.random.randint(1, 2, size = user_series)
if pair1 == 1:
pair1_list.append("H")
elif pair1 == 2:
pair1_list.append("T")
pair2 = np.random.randint(1,2, size = user_series)
if pair2 == 1:
pair2_list.append("H")
elif pair2 == 2:
pair2_list.append("T")
tosses += 1
return tosses
print(pair1_list)
print(pair2_list)