Nei*_*l G 7 language-agnostic math numerical-stability
什么是数值最稳定的计算方法:
log[(wx * exp(x) + wy * exp_y)/(wx + wy)]
Run Code Online (Sandbox Code Playgroud)
重量在哪里wx, wy > 0
?
如果没有权重,这个函数logaddexp
可以在Python中用NumPy实现,如下所示:
tmp = x - y
return np.where(tmp > 0,
x + np.log1p(np.exp(-tmp)),
y + np.log1p(np.exp(tmp)))
Run Code Online (Sandbox Code Playgroud)
我应该如何将其推广到加权版本?
logaddexp
如果将加权表达式重写为,则可以将原始函数用于此目的,
这相当于,
logaddexp( x + log(w_x), y + log(w_y) ) - log(w_x + w_y)
Run Code Online (Sandbox Code Playgroud)
它应该与原始logaddexp
实现一样在数值上稳定.
注:我指的numpy.logaddexp
是发生在函数x
和y
,不x
和exp_y
,因为你在这个问题提了.