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

RuntimeWarning:除以零错误:如何避免?PYTHON,NUMPY

漆雕绍晖
2023-03-14
问题内容

我正在运行RuntimeWarning:在除法中遇到无效的值

 import numpy
 a = numpy.random.rand((1000000, 100))
 b = numpy.random.rand((1,100))
 dots = numpy.dot(b,a.T)/numpy.dot(b,b)
 norms = numpy.linalg.norm(a, axis =1)
 angles = dots/norms ### Basically I am calculating angle between 2 vectors

我的a中有一些向量的范数为0。因此在计算角度时会发出运行时警告。

在考虑0范数的情况下,是否存在一种单线pythonic方法来计算角度?

angles =[i/j if j!=0 else -2 for i,j in zip(dots, norms)] # takes 10.6 seconds

但是需要很多时间。由于所有角度的值都在1到-1之间,我只需要10个最大值就可以了。这大约需要10.6秒,这太疯狂了。


问题答案:

您可以使用np.errstate上下文管理器忽略警告,然后将nans替换为所需的内容:

import numpy as np
angle = np.arange(-5., 5.) 
norm = np.arange(10.)
with np.errstate(divide='ignore'):
    print np.where(norm != 0., angle / norm, -2)
# or:
with np.errstate(divide='ignore'):
    res = angle/norm
res[np.isnan(res)] = -2


 类似资料:
  • 问题内容: 我有此错误信息: 消息8134,级别16,状态1,第1行除以零错误。 编写SQL代码的最佳方法是什么,这样我就再也看不到此错误消息了? 我可以执行以下任一操作: 添加一个where子句,这样我的除数永远不会为零 或者 我可以添加一个case语句,以便对零进行特殊处理。 使用子句的最佳方法是吗? 有没有更好的方法,或者如何执行? 问题答案: 为了避免出现“被零除”错误,我们对此进行了如下

  • 在使用LabelPropagation时,我经常遇到此警告(这应该是一个错误,因为它完全无法传播): /usr/local/lib/python3.5/dist-packages/sklearn/semi_supervised/label_propagation。py:279:RuntimeWarning:true_divit自身中遇到无效值。label_distributions_/=标准化器

  • 问题内容: 我设计了一个简单的函数来返回数学函数,该函数可用于拟合实验数据。这些功能看起来很像以下内容: 不幸的是,我在RunTimeWarnings中遇到了麻烦: 由于值太大或太小。但我无法自行解决此问题。有什么办法可以重新定义我的功能,使其在没有警告的情况下通过? 问题答案: 使用以控制在这种情况下做什么numpy的:http://docs.scipy.org/doc/numpy/refere

  • 我正在将oracle从10升级到12,对于这个特定的项目,我遇到了以下错误: 似乎它没有识别我在DataSource上添加的配置: 我们使用的是Java 8,我们对代码有这些依赖关系: 问题是它正在为另一个项目工作(与这个项目具有相同的结构,但由于某种原因它在这里不起作用) 是否有任何遗漏或我可以找到问题并解决问题的地方?

  • 问题内容: 我正在使用numpy.log10来计算概率值数组的对数。数组中有一些零,我正在尝试使用 但是,仍然出现,并且我确定这是引起警告的行。 尽管我的问题已解决,但我还是困惑为什么此警告一次又一次出现? 问题答案: 计算所有元素的以10为底的对数,甚至是元素未选择的对数。如果需要,可以在取对数以消除问题之前用或零填充一些零值。(不过,请确保您不`prob 0.0000000001`使用虚拟值进

  • 问题内容: 我试图写一个近似平方根的函数(我知道有数学模块……我想自己做),但我被浮点运算搞砸了。如何避免这种情况? 使用它会产生以下结果: 我意识到我可以使用,但是我希望能够做到这一点非常准确。我希望能够计算出6或7位数字。如果我四舍五入,那将是不可能的。我想了解如何在Python中正确处理浮点计算。 问题答案: 这实际上与Python无关- 使用硬件的二进制浮点算法,您会在任何语言中看到相同的

  • 我正在尝试使用Python登录一个网站并从多个网页收集信息,我收到以下错误: 我用了,它可以工作,但它似乎不明智且不可靠,还有其他方法可以避免这个错误吗? 这是我的代码:

  • 问题内容: 我目前正在学习go,我的一些代码如下所示: 这在我看来有点不对劲,因为错误检查占用了大多数行。有没有更好的方法来进行错误处理?我是否可以通过一些重构来避免这种情况? 更新: 感谢您的所有答案。请注意,在我的示例中,doB取决于a,doC取决于b,依此类推。因此,大多数建议的重构在这种情况下不起作用。还有其他建议吗? 问题答案: 这是一个常见的投诉,有几个答案。 以下是一些常见的问题: