我正在使用函数:numpy.log(1 + numpy.exp(z))
对于z(1-705)的小值,它给出了身份结果(1-705 {如预期的}), 但是对于从710+开始的更大的z值,它会给出无穷大,并且抛出错误"运行时警告:在exp中遇到溢出"
答案 0 :(得分:3)
对于大型 z ,您可以使用
z + log(exp(-z) + 1)
在数学上但在数字上不是同一件事。
在代码中:
(z + np.log(np.exp(-z) + 1)) if z > 0 else np.log(1 + np.exp(z))
如果您需要矢量化版本:
np.maximum(z, 0) + np.log(np.exp(-np.absolute(z)) + 1)
正如@Praveen指出的那样,有一个函数np.log1p
可以计算log(1 + x),但如果| x |则更准确。是小。我建议在上面使用它。
答案 1 :(得分:0)
正在发生的事情是,您正在溢出寄存器,使其覆盖自身。您已超过可以存储在寄存器中的最大值。您将需要使用很可能与exp(。)不兼容的其他数据类型。您可能需要一个适用于64位整数的自定义函数。