当我将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
以下的所有值