小能豆

Numpy,除以零:同一运算的两个不同结果

py

经过一番搜索,我仍然在努力解决 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


阅读 71

收藏
2025-02-20

共1个答案

小能豆

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
2025-02-20