在2d-array上使用函数时处理numpy.exp溢出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在2d-array上使用函数时处理numpy.exp溢出相关的知识,希望对你有一定的参考价值。

我有一个2d numpy数组,我想使用我的函数sigmoid(x),它是:

    def sigmoid(x):
        return 1 / (1 + np.exp(-x))

我的问题是我的输入太大了3000,我得到这个警告:

RuntimeWarning: overflow encountered in exp
  return 1 / (1 + np.exp(-x/8.))

我试图将值分配给特定数字的输入,如700 - > 1和-700 - > 0,但是,这非常慢,因为我必须以这种方式遍历整个数组。

我也研究过np.logandexp(x1, x2),但我无法让它工作......

编辑:数据类型是float64顺便说一句

答案

你可以使用表现很好的SciPy's expit() function

In [114]: from scipy.special import expit

# sample input array
In [115]: x = np.arange(50000, dtype=np.float64)

In [116]: sigm = expit(x)

# sanity check for no `np.inf`
In [117]: expit(70000.0)
Out[117]: 1.0
另一答案

您可以将输入转换为日志空间并在之后运行sigmoid,这会显着缩小大值。

以上是关于在2d-array上使用函数时处理numpy.exp溢出的主要内容,如果未能解决你的问题,请参考以下文章

使用 2D-Array 提供 PyQtGraph 条形图

AS3:如何开始创建游戏的教程

多处理:如何在类中定义的函数上使用 Pool.map?

为啥在windows上调用多处理模块的函数时python可执行文件会打开新的窗口实例

为啥我使用多处理/多线程的函数在 for 循环中使用时如此缓慢,但在循环之外却没有?

mysql必知必会--使用数据处理函数