kir*_*off 21 python numpy overflow exp
使用numpy,我有一个函数的定义:
def powellBadlyScaled(X):
f1 = 10**4 * X[0] * X[1] - 1
f2 = numpy.exp(-numpy.float(X[0])) + numpy.exp(-numpy.float(X[1])) - 1.0001
return f1 + f2
Run Code Online (Sandbox Code Playgroud)
在优化例程中,此函数被评估了很多次.它经常引发异常:
RuntimeWarning: overflow encountered in exp
Run Code Online (Sandbox Code Playgroud)
我知道操作数不能存储在float的已分配空间中.但是我怎样才能克服这个问题呢?
Joh*_*erg 18
您可以使用bigfloat包.它支持任意精度浮点运算.
http://packages.python.org/bigfloat/
import bigfloat
bigfloat.exp(5000,bigfloat.precision(100))
# -> BigFloat.exact('2.9676283840236670689662968052896e+2171', precision=100)
Run Code Online (Sandbox Code Playgroud)
您使用的是功能优化框架吗?它们通常实现价值边界(使用惩罚条款).试试吧.相关价值真的那么极端吗?在优化中,最小化log(f)并不罕见.(近似对数似然等).您确定要优化该exp值而不是log(exp(f))== f.?
看看我对这个问题的答案:极值的logit和inverse logit函数
顺便说一下,如果你所做的只是最小化powellBadlyScaled(x,y)那么最小值是x - > + inf和y - > + inf,所以不需要数字.
您可以用来numpy.seterr控制 numpy 在这种情况下的行为方式:http://docs.scipy.org/doc/numpy/reference/ generated/numpy.seterr.html
您还可以使用警告模块来控制如何显示或不显示警告:http://docs.python.org/library/warnings.html
| 归档时间: |
|
| 查看次数: |
49774 次 |
| 最近记录: |