np.random.choice()不接受概率列表

时间:2018-12-17 19:06:30

标签: python numpy

我正在尝试使用np.random.choice()根据给定的概率从列表中获取随机值。 但是,我注意到,当我尝试将概率列表直接传递给函数时,会收到错误消息TypeError: 'float' object cannot be interpreted as an integer;相反,当我在函数调用中明确写入列表时,一切都会按预期进行。

请参阅以下示例以了解我的意思:

>>> p = [0.5, 0.5]
>>> np.random.choice(["h","t"],p)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "mtrand.pyx", line 1163, in mtrand.RandomState.choice
  File "mtrand.pyx", line 995, in mtrand.RandomState.randint
  File "mtrand.pyx", line 996, in mtrand.RandomState.randint
  File "randint_helpers.pxi", line 202, in mtrand._rand_int32
TypeError: 'float' object cannot be interpreted as an integer
>>> np.random.choice(["h","t"],p=[0.5,0.5])
't'

有人对如何解决该错误以及如何将列表传递给函数有任何想法吗?显然,我无法对程序中的概率进行硬编码,也无法理解numpy抱怨的方式或原因。

编辑:注意,我应该在发布此代码后立即将p = p传递给函数,我将其作为一个示例说明为什么您总是要掩盖所有错误

1 个答案:

答案 0 :(得分:3)

该函数的签名为np.random.choice(a, size=None, replace=None, p=None)。因此,如果您未指定要传递给哪个变量,那么np.random.choice(["h","t"],p)会将p解释为size,即intint的元组。要解决此问题,请执行np.random.choice(["h","t"],p=p)