您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

根据Numpy开发人员Robert Kern所说

与真正的浮点错误(硬件FPU在执行溢出的原子操作时会设置标志)不同,我们需要自己实现整数溢出检测。我们在标量上执行此操作,但不在数组上执行,因为对于数组上的每个原子操作而言,实现它都太慢了。

因此,选择合适的负担是您的重担,dtypes这样就不会出现任何操作溢出的情况。

python 2022/1/1 18:32:50 有239人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶