当前位置: 首页 > 面试题库 >

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

楚举
2023-03-14
问题内容

我是编程新手。在我最新的Python 2.7项目中,我遇到了以下问题:

RuntimeWarning:long_scalars中遇到溢出

有人可以详细说明这意味着什么,我可以做些什么来解决?

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

它发生在附加过程中,例如:

SomeList.append(VeryLongFormula)

问题答案:

这是发出相同警告的示例:

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这样就不会出现任何操作溢出的情况。



 类似资料:
  • 本文向大家介绍Java中在时间戳计算的过程中遇到的数据溢出问题解决,包括了Java中在时间戳计算的过程中遇到的数据溢出问题解决的使用技巧和注意事项,需要的朋友参考一下 背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下。 先放出结论:因为java中整数默认是int类型,在计算的过程中30 * 24 * 60

  • 问题内容: 我不断遇到Java问题的细微变化,并且这个问题开始浮现,我真的想不出解决该问题的合适方法。 我有一个最终的但动态的对象属性。也就是说,我希望该值一旦分配便是恒定的,但该值在每个运行时可以不同。因此,我在课程开始时声明了课程级别变量-say 。然后,在构造函数中,给它分配一个值-说 当我的方法中有引发异常的代码时,问题就开始了。所以我在构造函数中尝试这样的事情: 现在我有一个错误-“空白

  • 我正在使用Cassandra 3.10,并试图通过每个查询都有一个表来遵循最佳实践,因此我使用批处理插入发音将多个表作为单个事务插入,但我在cassandra日志中出现以下错误。 [zed.payment,zed.trade_party_b_ref,zed.trade_product_type,zed.trade,zed.fx_variance_swap,zed.trade_party_a_ref

  • 我正在尝试在tkinter自定义标题栏。 使用以下代码: null 我希望能够添加一个最小化按钮。我尝试用 作为命令创建一个类似于关闭按钮的按钮,但它不能与 一起工作。 null 此外,移动有一个很大的问题,当你尝试移动窗口时,它会移动窗口,使其左上角位于光标所在的位置。这是非常恼人的,也不是Windows的典型行为。 如果有人知道如何解决这些问题,我们将不胜感激。 编辑:我现在已经成功地制作了一

  • 我被要求为安全类实现AES算法。在实现过程中,我找不到答案,我如何从用户那里接受像密码这样的任意长度的密钥,并将其转换为128、192或256位密钥。我该怎么办?

  • 编辑:底部的工作代码 我对编程相对较新,我正在试图理解为什么这不起作用。我决定通过一个函数而不是来处理卡片,以保持它尽可能模块化。这是我下面的代码;我知道错误与指针有关,但我不明白我做错了什么。 工作代码: