我正在尝试计算一个向量,其总和为1,其元素定义如下:
v[i] = exp(tmp[i])/exp(tmp).sum()
问题是指数中的值可能很大(在-10 ^ 2到10 ^ 2之间),使得指数可以评估为inf或0。
我尝试了一些变化,例如将最大元素或tmp的平均值减去分子和分母,但它仍然不够。
基本上,我需要进行转换,以减少tmp中的平均值和色散,或者为此计算提供一个巧妙的排序。
我使用numpy数组作为容器,exp是numpy.exp。
答案 0 :(得分:3)
>>> 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.])