如何解决Python RuntimeWarning:在长标量中遇到溢出
这是发出相同警告的示例:
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
,并且在an中可存储的最大值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
这样就不会出现任何操作溢出的情况。
解决方法
我是编程新手。在我最新的Python 2.7项目中,我遇到了以下问题:
RuntimeWarning:long_scalars中遇到溢出
有人可以详细说明这意味着什么,我可以做些什么来解决?
代码会一直运行,但是我不确定忽略警告是否是个好主意。
它发生在附加过程中,例如:
SomeList.append(VeryLongFormula)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。