经过一番搜索,我仍然在努力解决 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 不参与您的功能。如果您想更改输出,f
则必须捕获。ZeroDivisionError
import numpy
def f(x) :
try:
return 1./(x-1.)
except ZeroDivisionError:
return numpy.nan
或者使用 numpy 的除法:
import numpy
def f(x) :
return numpy.divide(1., (x-1.))
或者仅将 numpy 类型传递给f
:
import numpy
def f(x) :
return 1./(x-1.)
x = numpy.float_(1)
print f(x) # prints inf