Python RuntimeWarning:长标量中遇到溢出
Posted
技术标签:
【中文标题】Python RuntimeWarning:长标量中遇到溢出【英文标题】:Python RuntimeWarning: overflow encountered in long scalars 【发布时间】:2011-11-25 10:52:22 【问题描述】:我是编程新手。在我最新的 Python 2.7 项目中,我遇到了以下问题:
RuntimeWarning:long_scalars 中遇到溢出
谁能详细说明这意味着什么以及我可以做些什么来解决这个问题?
代码运行通过,但我不确定忽略警告是否是个好主意。
它发生在附加过程中,例如:
SomeList.append(VeryLongFormula)
【问题讨论】:
能否请您出示一个证明此问题的short, complete example? 你包含了 numpy 标签。您的问题中没有任何内容表明 numpy。您没有包含允许我们重现错误的代码。请这样做。 ***.com/questions/3767409/…的可能重复 【参考方案1】:解决这个问题的一个简单方法是使用 64 位类型
list = numpy.array(list, dtype=numpy.float64)
【讨论】:
【参考方案2】:这是一个发出相同警告的示例:
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
中的最大值为 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,
不同于真正的浮点错误(硬件 FPU 设置一个 旗帜 每当它执行溢出的原子操作时),我们需要 自己实现整数溢出检测。我们这样做 这 标量,但不是数组,因为实现起来太慢了 为了 数组上的每个原子操作。
因此,您有责任选择合适的dtypes
,以免操作溢出。
【讨论】:
谢谢!如何定义我想要的 dtype? 创建numpy数组时可以设置dtype
。例如,在我上面的例子中,你可以通过设置来避免溢出错误:A = np.array([10],dtype='int64')
这是list of basic dtypes。
非常感谢!!!我将变量 AF 和 RT 转换为 float64:AF = np.float64(AF)
,警告消失了。
@Zelphir:感谢您指出这一点。你是对的——在 32 位操作系统上,np.multiply.reduce(np.arange(17)+1)
返回 -288522240
(ideone demo),但在 64 位操作系统上,它返回正确答案 355687428096000
。我将上面帖子中的示例更改为np.multiply.reduce(np.arange(21)+1)
,它在 32 位和 64 位操作系统上都会溢出。以上是关于Python RuntimeWarning:长标量中遇到溢出的主要内容,如果未能解决你的问题,请参考以下文章
python3 Django 报错RuntimeWarning的解决办法
使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待
如何阻止 python RuntimeWarning 打印到终端? [复制]
RuntimeWarning , RuntimeError (Discord 服务器上的 Python Al Chat Bot)
遇到问题--python---RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility.(
遇到问题--python---RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility.(