我对编程很陌生。在我最近的Python2.7项目中,我遇到了以下情况:
RuntimeWarning: long_scalars中遇到的溢出
有人能详细说明一下这意味着什么吗?我能做些什么来解决这个问题?
代码会一直运行,但我不确定忽略警告是否是个好主意。
这种情况发生在追加过程中,如:
SomeList.append(VeryLongFormula)
发布于 2011-09-26 19:02:38
下面是一个发出同样警告的示例:
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a
收益率
RuntimeWarning: overflow encountered in long_scalars
在上面的示例中,之所以会出现这种情况,是因为a
是dtype int32
,而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
不像真正的浮点错误(硬件FPU在执行溢出的原子操作时设置一个标志),我们需要自己实现整数溢出检测。我们在标量上这样做,但不是数组,因为对数组上的每个原子操作实现起来都太慢了。
因此,您需要选择适当的dtypes
,这样操作就不会溢出。
发布于 2018-02-12 08:25:05
克服这个问题的一个简单方法是使用64位类型的。
list = numpy.array(list, dtype=numpy.float64)
https://stackoverflow.com/questions/7559595
复制相似问题