gpt4 book ai didi

python - 使用 numpy 处理 exp 中的溢出

转载 作者:IT老高 更新时间:2023-10-28 20:40:56 25 4
gpt4 key购买 nike

使用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

这个函数在优化例程中被计算了很多次。它经常引发异常:

RuntimeWarning: overflow encountered in exp

我了解操作数不能存储在为 float 分配的空间中。但是我该如何克服这个问题呢?

最佳答案

您可以使用 bigfloat 包。它支持任意精度的浮点运算。

http://packages.python.org/bigfloat/

import bigfloat
bigfloat.exp(5000,bigfloat.precision(100))
# -> BigFloat.exact('2.9676283840236670689662968052896e+2171', precision=100)

你在使用功能优化框架吗?他们通常实现值(value)边界(使用惩罚项)。试试看。相关值真的那么极端吗?在优化中,最小化 log(f) 并不少见。 (近似对数似然等)。您确定要优化该 exp 值而不是 log(exp(f)) == f. ?

看看我对这个问题的回答:logit and inverse logit functions for extreme values

顺便说一句,如果你所做的只是最小化 powellBadlyScaled(x,y),那么最小值在 x -> + inf 和 y -> + inf 处,所以不需要数字。

关于python - 使用 numpy 处理 exp 中的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9559346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com