首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python RuntimeWarning:长标量中遇到的溢出

Python RuntimeWarning:长标量中遇到的溢出
EN

Stack Overflow用户
提问于 2011-09-26 18:32:44
回答 2查看 255.8K关注 0票数 83

我对编程很陌生。在我最近的Python2.7项目中,我遇到了以下情况:

RuntimeWarning: long_scalars中遇到的溢出

有人能详细说明一下这意味着什么吗?我能做些什么来解决这个问题?

代码会一直运行,但我不确定忽略警告是否是个好主意。

这种情况发生在追加过程中,如:

代码语言:javascript
运行
复制
SomeList.append(VeryLongFormula)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-26 19:02:38

下面是一个发出同样警告的示例:

代码语言:javascript
运行
复制
import numpy as np
np.seterr(all='warn')
A = np.array([10])
a=A[-1]
a**a

收益率

代码语言:javascript
运行
复制
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上

代码语言:javascript
运行
复制
>>> np.multiply.reduce(np.arange(21)+1)
-1195114496

而在64位NumPy上:

代码语言:javascript
运行
复制
>>> np.multiply.reduce(np.arange(21)+1)
-4249290049419214848

两者都在没有任何警告的情况下失败,尽管这也是由于溢出错误造成的。正确的答案是21!等于

代码语言:javascript
运行
复制
In [47]: import math

In [48]: math.factorial(21)
Out[50]: 51090942171709440000L

根据numpy开发者的说法,Robert Kern

不像真正的浮点错误(硬件FPU在执行溢出的原子操作时设置一个标志),我们需要自己实现整数溢出检测。我们在标量上这样做,但不是数组,因为对数组上的每个原子操作实现起来都太慢了。

因此,您需要选择适当的dtypes,这样操作就不会溢出。

票数 84
EN

Stack Overflow用户

发布于 2018-02-12 08:25:05

克服这个问题的一个简单方法是使用64位类型的

代码语言:javascript
运行
复制
list = numpy.array(list, dtype=numpy.float64)
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7559595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档