【发布时间】:2016-01-07 20:10:29
【问题描述】:
经过一番搜索后,我仍然在 numpy. 我被我马上报告的矛盾惊呆了:
from numpy import *
seterr(all='ignore') # Trying to avoid ZeroDivisionError, but unsuccessful.
def f(x) :
return 1./(x-1.)
有了这个,当我执行f(1.),我得到
ZeroDivisionError: float division by zero.
但是,当我定义
z = array( [ 1., 1. ] ) 并执行 f(z),我没有收到任何错误,但是
array([ inf, inf]).
如您所见,两种输出之间存在某种矛盾。 我的第一个问题是为什么。
理想情况下,我希望得到inf 作为f(1.) 的输出,或者至少是nan,但不是错误(因此计算的停止)。
我的第二个问题是如何管理这个。
请注意我使用seterr 失败的尝试。
【问题讨论】:
-
难道不是在第一种情况下您正在处理一个整数,而在第二种情况下您正在使用一个 numpy 数组?这些是不同的事情,行为会有所不同,具体取决于为每个操作定义的方式。我认为如果你想要一致的输出,你必须为函数提供一致的输入类型,或者至少是在操作下表现相同的类型。
标签: python numpy divide-by-zero