代码之家  ›  专栏  ›  技术社区  ›  Luca Giorgi

np.random.choice()不接受概率列表[已关闭]

  •  -1
  • Luca Giorgi  · 技术社区  · 6 年前

    我想用 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传递给函数,我将把它作为一个例子来说明为什么你应该总是避免所有的bug

    1 回复  |  直到 6 年前
        1
  •  3
  •   Quang Hoang    6 年前

    函数的签名是 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) .