计算1 /(1 + exp(x))python时避免数值不稳定

ben*_*nbo 2 python floating-point numpy expansion scipy

我想为(可能很大)x计算1 /(1 + exp(x)).这是0和1之间表现良好的函数.我可以这样做

import numpy as np
1.0/(1.0+np.exp(x))
Run Code Online (Sandbox Code Playgroud)

但是在这个天真的实现中,np.exp(x)很可能只返回0或大于x的无穷大,具体取决于符号.python中是否有可以帮助我的功能?

我正在考虑实施一系列扩展和系列加速,但我想知道这个问题是否已经解决了.

War*_*ser 5

你可以用scipy.special.expit(-x).它将避免产生溢出警告1.0/(1.0 + exp(x)).

  • 很好 - `expit` 也适用于 `np.longdouble`,并且在比我天真的答案稍大的 `x` 值时溢出。 (2认同)