我正在尝试使用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传递给函数,我将其作为一个示例说明为什么您总是要掩盖所有错误
答案 0 :(得分:3)
该函数的签名为np.random.choice(a, size=None, replace=None, p=None)
。因此,如果您未指定要传递给哪个变量,那么np.random.choice(["h","t"],p)
会将p
解释为size
,即int
或int
的元组。要解决此问题,请执行np.random.choice(["h","t"],p=p)
。