Python 查找生成NaN的计算

Python 查找生成NaN的计算,python,debugging,numpy,scipy,nan,Python,Debugging,Numpy,Scipy,Nan,我有一段相当大(几千行)的Python/Numpy/Scipy代码,它使用某些输入抛出了nan。我寻找并发现了一些常见的嫌疑犯(log(0)等等),但显然没有一个是本案的罪魁祸首 是否有一种相对轻松的方法(即,除了在每个潜在的罪犯周围放置异常处理代码外)来找出这些NAN的来源?我将首先介绍 在这里,无效操作被定义为“结果不是可表达的数字,通常表示生成了NaN”。默认情况下,这似乎设置为“忽略”。您可以使用numpy.seterr全局设置所有numpy例程的浮点错误处理行为。这应该可以让您精确地指

我有一段相当大(几千行)的Python/Numpy/Scipy代码,它使用某些输入抛出了nan。我寻找并发现了一些常见的嫌疑犯(
log(0)
等等),但显然没有一个是本案的罪魁祸首

是否有一种相对轻松的方法(即,除了在每个潜在的罪犯周围放置异常处理代码外)来找出这些NAN的来源?

我将首先介绍


在这里,无效操作被定义为“结果不是可表达的数字,通常表示生成了NaN”。默认情况下,这似乎设置为“忽略”。

您可以使用
numpy.seterr
全局设置所有numpy例程的浮点错误处理行为。这应该可以让您精确地指出它们出现在代码中的什么地方(或者至少是numpy第一次看到它们的地方)。

您可以使用monkey patch
numpy.nan
来引发异常……如果nan是在纯Python代码中生成的呢?如果
numpy.seterr
起作用,我很困惑,
numpy
如何拦截内置Python对NaN的作用?如果
numpy.seterr
不起作用,那么推荐的解决方案是什么?