捕获我计算中出现NaN的时刻
我在用线性回归做循环计算的时候,常常会遇到无穷大的情况。每当我检查变量的输出时,发现一旦出现“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