找出生成NaN的计算

9 投票
2 回答
1365 浏览
提问于 2025-04-16 18:49

我有一段比较大的代码(几千行),是用Python、Numpy和Scipy写的,遇到某些输入时会出现NaN(不是一个数字)。我查找了一些常见的问题,比如log(0)之类的,但这些明显的问题在这里似乎并不是原因。

有没有一种比较简单的方法(也就是说,不用在每个可能出问题的地方加上异常处理代码),来找出这些NaN是从哪里来的呢?

2 个回答

3

你可以使用 numpy.seterr 来全局设置浮点数错误的处理方式,这样所有的 numpy 函数都会遵循这个设置。这样做可以帮助你找到代码中出现错误的具体位置(或者至少是 numpy 第一次发现这些错误的地方)。

9

我建议你先了解一下 numpy.seterr

在这里,"无效操作"的意思是“结果不是一个可以表达的数字,通常表示产生了一个NaN(不是一个数字)”。默认情况下,这个设置似乎是“忽略”。

撰写回答