Numpy的问题:试图模拟N系列抛硬币的1000序列

时间:2018-10-05 10:55:13

标签: python numpy

所以我想做的是计算两个相同头数的抛硬币的几率。要求之一是,我通过模拟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语句有问题,但我不知道如何解决。

2 个答案:

答案 0 :(得分:1)

np.random.randint(1, 2, size=5)返回array([1, 1, 1, 1, 1])。您不能真正将长度为user_series的数组与单个值12进行比较。

请参见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)