如何使用int参数从lambda返回double

时间:2017-09-10 03:20:10

标签: python lambda

我为sigmoid函数写了这个lambda:

sigmoid = lambda x: 1 / (1 + np.exp(-x))

我在数组上使用它来显然计算sigmoid。

Python给了我一个警告:

RuntimeWarning: overflow encountered in exp

这个陈述。我该如何解决?

发送到此lambda的值是浮点数。

2 个答案:

答案 0 :(得分:1)

numpy.clip

np.clip也可以同时处理x数组

import sys   
import numpy as np

xmax = np.log(sys.float_info.max)

sigmoid = lambda x: 1 / (1 + np.exp(np.clip(-x, a_min=None, a_max=xmax)))

sigmoid(-10000)
Out[155]: 5.5626846462681369e-309

答案 1 :(得分:1)

您可以使用numpy.seterr

numpy.seterr() 始终会返回一个字典,其中包含当前对不同数字错误的处理,默认情况下为

>>> seterr()
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
>>> 

要更改其中一项行为并保存当前默认值,您可以 做

>>> def_handlers = np.seterr(over='ignore')

然后你可以进行sigmoid评估,最后你可以恢复默认值

>>> np.seterr(**def_handlers);

考虑到sigmoid值数组现在可能包含inf条目,您的代码具有来处理此可能性。