gpt4 book ai didi

python - Numpy,除以零 : two different results for the same operation

转载 作者:行者123 更新时间:2023-11-30 23:02:05 26 4
gpt4 key购买 nike

经过一番搜索后,我仍然在 numpy 中被零除的问题上苦苦挣扎。我对我立即报告的矛盾感到震惊:

from numpy import *

seterr(all='ignore') # Trying to avoid ZeroDivisionError, but unsuccessful.

def f(x) :
return 1./(x-1.)

这样,当我执行 f(1.) 时,我得到ZeroDivisionError: float 除以零

但是,当我定义z = array( [ 1., 1. ] ) 并执行 f(z),我没有收到任何错误,但是数组([inf,inf])

正如您所看到的,两个输出之间存在某种矛盾。我的第一个问题是为什么。

理想情况下,我希望得到 inf 作为 f(1.) 的输出,或者至少是 nan,但不是错误(因此计算停止)。我的第二个问题是如何管理这个问题。请注意我使用 seterr 的失败尝试。

最佳答案

1. 是一个普通的 Python float ,它们会引发异常,而不是使用 nan/inf。当您调用 f(1.) 时,numpy 不会以任何方式参与。仅执行 from numpy import * (或调用 seterr 之类的 numpy 函数)不会改变普通 Python 类型的工作方式;它只会影响对 numpy 对象的操作,并且只有显式创建它们才能获得 numpy 对象。

当您确实显式创建 numpy 对象时,如 f(z) 示例中所示,您涉及 numpy,它有自己的类型,与基本 Python 不同类型。值得注意的是,numpy 数字类型确实使用 nan/inf。

据我所知,没有办法让普通的Python float 开始返回naninf而不是引发异常,所以你必须使用如果您想同时支持标量和向量运算,请使用 numpy 标量而不是普通的 Python float (如 this question 中所述)。

关于python - Numpy,除以零 : two different results for the same operation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com