Numpy 为什么这两个功能不相等?

Numpy 为什么这两个功能不相等?,numpy,Numpy,这是取自: 这是简化上述代码的一种尝试: def sample(p, temperature=1.0): p = np.exp(np.log(p) / temperature) p = np.random.multinomial(1, p / p.sum(), 1) return np.argmax(p) 但是,第二个失败,出现以下错误: File "z.py", line 75, in sample p = np.random.

这是取自:

这是简化上述代码的一种尝试:

    def sample(p, temperature=1.0):
        p = np.exp(np.log(p) / temperature)
        p = np.random.multinomial(1, p / p.sum(), 1)
        return np.argmax(p)
但是,第二个失败,出现以下错误:

File "z.py", line 75, in sample
    p = np.random.multinomial(1, p / p.sum(), 1)
  File "mtrand.pyx", line 4593, in mtrand.RandomState.multinomial (numpy/random/mtrand/mtrand.c:37541)
ValueError: sum(pvals[:-1]) > 1.0

这怎么可能呢?

我的系统是64位的,所以numpy的默认数据类型是float64,但是这个函数的一些输入是32位的float,因此,在其中的某个地方,两种数据类型的混合导致了错误。

在将值传递到
多项式之前,您是否比较了这些值?原始函数执行到
float64
的转换。什么数据类型具有
p
File "z.py", line 75, in sample
    p = np.random.multinomial(1, p / p.sum(), 1)
  File "mtrand.pyx", line 4593, in mtrand.RandomState.multinomial (numpy/random/mtrand/mtrand.c:37541)
ValueError: sum(pvals[:-1]) > 1.0