Python 如何对数值稳定性的计算进行排序?

Python 如何对数值稳定性的计算进行排序?,python,numpy,numerical,exponential,stability,Python,Numpy,Numerical,Exponential,Stability,我试图计算一个向量,其和为1,其元素定义如下: v[i] = exp(tmp[i])/exp(tmp).sum() 问题是指数中的值可能很大(介于-10^2和10^2之间),使得指数的计算结果为inf或0 我尝试了一些变化,比如用分子和分母减去最大元素或tmp的平均值,但仍然不够 基本上,我需要一个转换,减少tmp中的平均值和色散,或者为这个计算提供一个巧妙的排序 我使用numpy数组作为容器,exp是numpy.exp >>> tmp = np.array([-10**10

我试图计算一个向量,其和为1,其元素定义如下:

v[i] = exp(tmp[i])/exp(tmp).sum()
问题是指数中的值可能很大(介于-10^2和10^2之间),使得指数的计算结果为inf或0

我尝试了一些变化,比如用分子和分母减去最大元素或tmp的平均值,但仍然不够

基本上,我需要一个转换,减少tmp中的平均值和色散,或者为这个计算提供一个巧妙的排序

我使用numpy数组作为容器,exp是numpy.exp

>>> tmp = np.array([-10**10, 10**10])
>>> tmp_max = tmp.max()
>>> log_D = log(sum(exp(tmp - tmp_max))) + tmp_max
>>> log_v = tmp - log_D
>>> v = np.exp(log_v)
>>> v
array([ 0.,  1.])

或者使用,.

这对我来说不起作用,但它给了我一些研究方向。谢谢