Numpy complex128 nan in division

Numpy complex128 nan in division

提问人:Lukas Lang 提问时间:8/17/2023 最后编辑:Lukas Lang 更新时间:8/18/2023 访问量:68

问:

我试图理解为什么我使用 numpy's(版本 1.24.2)收到警告,我没有使用内置类型得到警告:complex128complex

import math, numpy

(math.nan)/(1j*math.nan)
# (nan+nanj)

(math.nan)/numpy.complex128(1j*math.nan)
# <stdin>:1: RuntimeWarning: invalid value encountered in scalar divide
# (nan+nanj)

请注意,第二行出于某种原因发出警告,而第一行则没有。据我所知,nan/nan 应该只是 nan,没有任何警告?

另请注意,以下情况不会发生:float64

(math.nan)/numpy.float64(math.nan)
# nan

为什么 numpy 将版本视为无效,而版本则不然?(@Homer512已经指出了如何在评论中禁用警告,但是我想了解为什么首先会发生这种情况)complex128float64

麻木 警告 复数

评论

0赞 Homer512 8/17/2023
好吧,第一个不会生成警告,因为警告来自 numpy,并且第一行不涉及任何 numpy 类型。最后一个 () 也会生成警告。您可能看不到它,因为 Numpy 不会一直生成它。例如,如果您之前在交互模式下收到警告,则不会显示(math.nan)/numpy.complex128(math.nan)
0赞 Homer512 8/17/2023
您可以控制以下行为:numpy.org/doc/stable/reference/routines.err.html
0赞 Lukas Lang 8/17/2023
@Homer512谢谢!不过,我仍然试图理解的是,为什么评估首先被认为是“无效的”?nan/nan不应该只是nan吗?是什么让它如此特别?毕竟,不会引发错误,而是给出预期的 nan 结果complex128(math.nan)/numpy.float64(math.nan)
0赞 Homer512 8/17/2023
正如我所说,如果你写,它也会发出警告。只是解释器不会发出多个相同类型的警告以避免垃圾邮件。这只是一个警告。你仍然会得到结果。如果您不喜欢 numpy 警告您有关 NaN,只需点击我发布的链接并停用该行为即可(math.nan)/numpy.float64(math.nan)
0赞 Lukas Lang 8/17/2023
@Homer512 仅此而已:至少在我的系统上,即使在新会话中也不会发出任何警告。但是,后续确实会发出警告,但只是在您喊出时第一次发出警告。但是该版本从不引起警告,这就是我想了解的原因(math.nan)/numpy.float64(math.nan)(math.nan)/numpy.complex128(math.nan)float64

答: 暂无答案