Python RuntimeWarning:长标量中遇到溢出
我是编程新手。在我最新的 Python 2.7 项目中,我遇到了以下问题:
运行时警告:long_scalars 中遇到溢出
有人可以详细说明这意味着什么以及我可以采取什么措施来解决这个问题吗?
代码运行完毕,但我不确定忽略警告是否是个好主意。
它发生在附加过程中,例如:
SomeList.append(VeryLongFormula)
I am new to programming. In my latest Python 2.7 project I encountered the following:
RuntimeWarning: overflow encountered in long_scalars
Could someone please elaborate what this means and what I could do to fix that?
The code runs through, but I'm not sure if it is a good idea to just ignore the warning.
It happens during an append process like:
SomeList.append(VeryLongFormula)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下面是一个发出相同警告的示例:
在上面的示例中,发生
这种情况是因为
a
的数据类型为int32
,并且最大值可存储在int32
中代码>是2**31-1。由于10**10 > 2**32-1
,求幂得到的数字大于int32
中可以存储的数字。请注意,您不能依赖
np.seterr(all='warn')
来捕获所有溢出numpy 中的错误。例如,在 32 位 NumPy 上
和在 64 位 NumPy 上:
两者都会失败且没有任何警告,尽管这也是由于溢出错误造成的。正确答案是21!等于
根据 numpy 开发人员 Robert Kern 的说法,
因此,您有责任选择适当的
dtypes
,以免操作溢出。Here's an example which issues the same warning:
yields
In the example above it happens because
a
is of dtypeint32
, and the maximim value storable in anint32
is 2**31-1. Since10**10 > 2**32-1
, the exponentiation results in a number that is bigger than that which can be stored in anint32
.Note that you can not rely on
np.seterr(all='warn')
to catch all overflowerrors in numpy. For example, on 32-bit NumPy
while on 64-bit NumPy:
Both fail without any warning, although it is also due to an overflow error. The correct answer is that 21! equals
According to numpy developer, Robert Kern,
So the burden is on you to choose appropriate
dtypes
so that no operation overflows.解决这个问题的一个简单方法是使用64位类型
An easy way to overcome this problem is to use 64 bit type