当我将numpy.exp
应用于数字数组时,我得到以下运行时警告:
RuntimeWarning: overflow encountered in exp
现在我知道这个数组中的某些值导致exp
的结果溢出但我不知道哪一个(这个数组有数百万个条目)。
有没有办法让这个运行时警告更加冗长,因为它还会显示导致溢出的特定参数(更重要的是它在输入数组中的位置)?我发现了seterr和seterrcall但是它们似乎没有包含导致错误的内容(只是错误的内容)。
我知道 - 在遇到此警告后 - 我可以将数组中的每个值分别传递给exp
并注意警告或我可以使用isfinite来测试{{{}}的元素1}}。然而,这意味着搞乱实际的代码,而我宁愿numpy在幕后做这种事情(正确配置)。
编辑:我被要求发布一些重现错误的代码。这是:
exp(array)
我想知道索引为>>> 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 :(得分:-1)
问题在于exp(1e308)太大而不能浮动!
如果您考虑exp函数,知道1.7976931348623157e+308
是浮点数的最大值,请从数组中删除log(1.7976931348623157e+308) = 709
下面的所有值