gpt4 book ai didi

python - np.exp 溢出解决方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:27:52 25 4
gpt4 key购买 nike

我有以下等式:

result = (A * np.exp(b * (t - t0))) / (1 + np.exp(c * (t - t0)))

我输入一组 t 值以获取结果。 A,b,c,t0都是常量(bc很大,t0很小但是不像 b 和 c 大那么小)。问题是,我遇到了一个溢出错误,因为指数值很快变得太大而无法放入超出特定 t 范围的 float64。我正在尝试找到解决方法,同时仍保持相当高的精度。 result 值完全在 float64 容器的范围内,但是 np.exp 计算的中间值过大使我无法获得结果。

我的一些想法:

  • 缩小 t 输入以获得所需的值范围,然后缩小输出以使结果正确
  • 将指数函数转换为对数函数

但是我不确定如何实现这些想法,或者它们是否真的有效。

这个问题的本质归结为 result = np.exp(a)/np.exp(b),其中 a 和 b 在 100-1000 的范围内。 np.exp(709) 结果为 8.2e307,恰好在 float64 的极限,但我有更大的值需要输入它。虽然两个指数的比较产生了一个合理的值,但指数本身太大而无法计算。

最佳答案

将所有内容保持在对数范围内是解决此类问题的常见方法。至少这就是我们在统计数据中所做的,您经常会在 1e-10000 范围内下降,尤其是在您接近收敛之前的开始。例如,所有 scipy 概率密度函数都有 logpdf 变体,它们在对数尺度上工作。

我想你的表达会重写成这样:

d = t - t0
log_result = (np.log(A) + (b * d)) - np.logaddexp(0, c * d)

(未经测试)

关于python - np.exp 溢出解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53198032/

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