标签: divide-by-zero

我如何捕获一个numpy警告,就像它是一个例外(不仅仅是测试)?

我必须在Python中为我正在做的项目制作拉格朗日多项式.我正在做一个重心的样式,以避免使用显式的for循环而不是Newton的分割差异样式.我遇到的问题是我需要将除法除以零,但Python(或者可能是numpy)只是使它成为警告而不是正常的异常.

所以,我需要知道的是抓住这个警告,好像它是一个例外.我在本网站上发现的相关问题没有按照我需要的方式回答.这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import warnings

class Lagrange:
    def __init__(self, xPts, yPts):
        self.xPts = np.array(xPts)
        self.yPts = np.array(yPts)
        self.degree = len(xPts)-1 
        self.weights = np.array([np.product([x_j - x_i for x_j in xPts if x_j != x_i]) for x_i in xPts])

    def __call__(self, x):
        warnings.filterwarnings("error")
        try:
            bigNumerator = np.product(x - self.xPts)
            numerators = np.array([bigNumerator/(x - x_j) for x_j in self.xPts])
            return sum(numerators/self.weights*self.yPts) 
        except Exception, e: # Catch division by 0. Only possible in 'numerators' array
            return yPts[np.where(xPts …
Run Code Online (Sandbox Code Playgroud)

python warnings numpy exception divide-by-zero

151
推荐指数
4
解决办法
10万
查看次数

无论结果是什么,支持除零的最快整数除法是什么?

摘要:

我正在寻找最快的计算方法

(int) x / (int) y
Run Code Online (Sandbox Code Playgroud)

没有得到例外y==0.相反,我只想要一个任意的结果.


背景:

在编码图像处理算法时,我经常需要除以(累积的)α值.最简单的变体是带有整数运算的普通C代码.我的问题是,我通常得到结果像素的零误差除法alpha==0.然而,这正是结果无关紧要的像素:我不关心像素的颜色值alpha==0.


细节:

我正在寻找类似的东西:

result = (y==0)? 0 : x/y;
Run Code Online (Sandbox Code Playgroud)

要么

result = x / MAX( y, 1 );
Run Code Online (Sandbox Code Playgroud)

x和y是正整数.代码在嵌套循环中执行了很多次,所以我正在寻找一种摆脱条件分支的方法.

当y不超过字节范围时,我对解决方案感到满意

unsigned char kill_zero_table[256] = { 1, 1, 2, 3, 4, 5, 6, 7, [...] 255 };
[...]
result = x / kill_zero_table[y];
Run Code Online (Sandbox Code Playgroud)

但这显然不适用于更大的范围.

我想最后一个问题是:什么是最快的位,将hack改为0到任何其他整数值,同时保持所有其他值不变?


澄清

我不是100%确定分支太贵了.但是,使用了不同的编译器,所以我更喜欢基准测试而几乎没有优化(这确实值得怀疑).

当然,编译器很有用,但是我不能在C中表达"不关心"的结果,因此编译器永远无法使用全范围的优化.

代码应完全兼容C,主要平台是带有gcc&clang和MacOS的Linux 64位.

c c++ optimization divide-by-zero

109
推荐指数
3
解决办法
6221
查看次数

C++警告:将double除以零

情况1:

#include <iostream>

int main()
{
    double d = 15.50;
    std::cout<<(d/0.0)<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它编译时没有任何警告和打印inf.好的,C++可以处理除零,(实时查看).

但,

案例2:

#include <iostream>

int main()
{
    double d = 15.50;
    std::cout<<(d/0)<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译器发出以下警告(请参见实时):

warning: division by zero [-Wdiv-by-zero]
     std::cout<<(d/0)<<std::endl;
Run Code Online (Sandbox Code Playgroud)

为什么编译器会在第二种情况下发出警告?

0 != 0.0吗?

编辑:

#include <iostream>

int main()
{
    if(0 == 0.0)
        std::cout<<"Same"<<std::endl;
    else
        std::cout<<"Not same"<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Same
Run Code Online (Sandbox Code Playgroud)

c++ floating-point gcc divide-by-zero

97
推荐指数
5
解决办法
9340
查看次数

NumPy:除以0,除以零

我试图在python中执行元素明智的划分,但如果遇到零,我需要商才为零.

例如:

array1 = np.array([0, 1, 2])
array2 = np.array([0, 1, 1])

array1 / array2 # should be np.array([0, 1, 2])
Run Code Online (Sandbox Code Playgroud)

我总是可以通过我的数据使用for循环,但要真正利用numpy的优化,我需要除法函数在除以零错误时返回0而不是忽略错误.

除非我遗漏了某些内容,否则numpy.seterr()似乎不会在出错时返回值.有没有人有任何其他的建议,我可以如何通过零错误处理设置我自己的鸿沟来获得最好的numpy?

python arrays error-handling numpy divide-by-zero

83
推荐指数
5
解决办法
6万
查看次数

为什么当d == 0时'd / = d'不抛出零除异常?

我不太明白为什么我不能除以零例外:

int d = 0;
d /= d;
Run Code Online (Sandbox Code Playgroud)

我本来希望得到除以零的除法运算,但是反而d == 1

为什么在什么时候不d /= d将被零除d == 0

c++ division divide-by-zero compiler-optimization undefined-behavior

80
推荐指数
3
解决办法
5485
查看次数

为什么Java除以0.0时不会抛出异常?

我有代码来计算2个数字之间的百分比差异(oldNum - newNum) / oldNum * 100;- 其中两个数字都是doubles.我希望在oldNum为0的情况下添加某种检查/异常处理.但是,当我为oldNum和newNum进行了值为0.0的测试运行时,执行继续,好像什么都没发生并且没有抛出错误.使用ints 运行此代码肯定会导致算术除零异常.为什么Java在涉及到doubles 时会忽略它?

java double types integer divide-by-zero

68
推荐指数
4
解决办法
5万
查看次数

我该如何避免使用"#DIV/0!" Google文档电子表格中的错误?

我有一个列,当通过单元格为空时average(K23:M23)开始.我希望只做包含非零,非空白值的单元格的平均值.我认为使用query命令是可能的:#DIV/0!K23M23

https://docs.google.com/support/bin/answer.py?hl=en&answer=159999

但他们的榜样对我没有帮助.

divide-by-zero google-sheets

59
推荐指数
3
解决办法
7万
查看次数

接近零浮点值是否会导致被零除错误?

每个人都知道你不应该直接比较花车,而是使用公差:

float a,b;
float epsilon = 1e-6f;
bool equal = (fabs(a-b) < epsilon);
Run Code Online (Sandbox Code Playgroud)

我想知道在分割中使用它之前是否同样适用于将值比较为零.

float a, b;
if (a != 0.0f) b = 1/a; // oops?
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我还需要与epsilon进行比较吗?

c c++ floating-point divide-by-zero

59
推荐指数
4
解决办法
1万
查看次数

Mod Zero不能?

为什么X % 0表达无效?

我一直认为X % 0应该等于X.既然你不能除以零,那么答案自然不应该是余数,X(剩下的一切)?

c++ modulo divide-by-zero

56
推荐指数
3
解决办法
5万
查看次数

避免在PostgreSQL中除以零

我想在SELECT子句中执行除法.当我连接一些表并使用聚合函数时,我经常使用null或零值作为分隔符.至于现在我只想出这种避免零和空值除法的方法.

(CASE(COALESCE(COUNT(column_name),1)) WHEN 0 THEN 1
ELSE (COALESCE(COUNT(column_name),1)) END) 
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点?

sql postgresql null aggregate-functions divide-by-zero

55
推荐指数
4
解决办法
6万
查看次数