捕获我计算中出现NaN的时刻

3 投票
1 回答
2116 浏览
提问于 2025-04-18 18:34

我在用线性回归做循环计算的时候,常常会遇到无穷大的情况。每当我检查变量的输出时,发现一旦出现“NaN”(不是一个数字),我的程序就会崩溃。我尝试了很多处理无穷大的方法,但程序还是会崩溃。我曾经试过把NaN替换成非常大的或非常小的值,但现在我觉得这样做没什么用。显然,我不应该把所有的NaN都当成一样的情况——有些NaN是因为正无穷大而产生的,有些则是因为负无穷大。

我真的需要知道我的代码在什么情况下会突然产生NaN,以及是负无穷大导致的,还是正无穷大导致的。在程序崩溃之前,我该怎么做才能找到这个点呢?

编辑

我知道怎么去检查 NaN。我可以直接用numpy.isnan,而且我也用过。但我想知道什么时候会发生这种情况。难道没有什么异常处理或者警告可以在发生时提醒我吗?

1 个回答

4

如果你想用numpy来“捕捉”数字计算中的错误,最好的办法可能是使用numpy.seterr这个功能。

比如说,当发生无效操作(导致出现NaN,也就是“不是一个数字”)时,你可以让程序抛出一个错误:

import numpy as np

np.seterr(invalid='raise')
np.float64(0)/0.

这样在控制台上就会显示出这个错误信息:

Traceback (most recent call last):
  File "h.py", line 4, in <module>
    np.float64(0)/0.
FloatingPointError: invalid value encountered in double_scalars

撰写回答