检索导致运行时警告的数组元素



当我将numpy.exp应用于数字数组时,我会收到以下运行时警告:

RuntimeWarning: overflow encountered in exp

现在我知道这个数组中的某个值导致exp的结果溢出,但我不知道是哪一个(这个数组有数百万个条目)。

有没有办法让这个运行时警告更加详细,因为它还显示了导致溢出的特定参数(更重要的是它在输入数组中的位置)?我发现了seterr和seterrcall,但它们似乎没有包含导致错误的原因(只是错误的原因)。


我知道,在遇到这个警告后,我可以将数组中的每个值分别传递给exp,并注意警告,或者我可以使用isfinite来测试exp(array)的元素。然而,这意味着要打乱实际的代码,而我更希望numpy在幕后做这种事情(适当配置)。


编辑:我被要求发布一些重现错误的代码。这是:

>>> import numpy
>>> array = numpy.zeros((10,), dtype=float)
>>> array[0] = 1.0e308
>>> numpy.exp(array)
__main__:1: RuntimeWarning: overflow encountered in exp
array([ inf,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.])

我想知道是索引为0的元素导致了溢出(而不仅仅是某个地方发生了溢出)。

问题只是exp(1e308)对于float来说太大了!

如果考虑exp函数,知道1.7976931348623157e+308是浮点的最大值,那么从数组中删除log(1.7976931348623157e+308) = 709以下的所有值

最新更新