我是编程新手。在我最新的 Python 2.7 项目中,我遇到了以下问题:
RuntimeWarning:long_scalars 中遇到溢出
有人可以详细说明这意味着什么以及我可以做些什么来解决这个问题吗?
代码运行完毕,但我不确定忽略警告是否是个好主意。
它发生在附加过程中,例如:
SomeList.append(VeryLongFormula)
这是发出相同警告的示例:
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
yields
RuntimeWarning: overflow encountered in long_scalars
在上面的例子中,发生这种情况是因为a
属于 dtypeint32
,以及存储在一个中的最大值int32
是 2**31-1。自从10**10 > 2**32-1
,求幂得到的数字大于可以存储在中的数字int32
.
请注意,您不能依赖np.seterr(all='warn')
捕获所有溢出
numpy 中的错误。例如,在 32 位 NumPy 上
>>> np.multiply.reduce(np.arange(21)+1)
-1195114496
在 64 位 NumPy 上:
>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848
两者都失败且没有任何警告,尽管这也是由于溢出错误造成的。正确答案是21!等于
In [47]: import math
In [48]: math.factorial(21)
Out[50]: 51090942171709440000L
根据 numpy 开发者 Robert Kern 的说法,
与真正的浮点错误不同(其中硬件 FPU 设置
旗帜
每当它执行溢出的原子操作时),我们需要
自己实现整数溢出检测。我们这样做
这
标量,但不是数组,因为实现起来太慢
为了
数组上的每个原子操作。
所以你有责任选择合适的dtypes
以免操作溢出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)