Python RuntimeWarning:在长标量中遇到溢出

我是编程新手.在我最新的Python 2.7项目中,我遇到了以下内容:

RuntimeWarning: overflow encountered in long_scalars

有人可以详细说明这意味着什么以及我能做些什么来解决这个问题?

代码贯穿始终,但我不确定忽略警告是否是个好主意.

它发生在追加过程中,如:

SomeList.append(VeryLongFormula)

解决方法:

这是一个发出相同警告的示例:

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中可存储的maximim值是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

According to numpy developer, Robert Kern,

Unlike true floating point errors (where the hardware FPU sets a
flag
whenever it does an atomic operation that overflows), we need to
implement the integer overflow detection ourselves. We do it on
the
scalars, but not arrays because it would be too slow to implement
for
every atomic operation on arrays.

因此,您需要选择适当的dtypes,以免任何操作溢出.

上一篇:NSURLConnection获取一个MP3文件


下一篇:【C++ OpenCV】绘制形状与文字、随机生成与绘制文本