在Python中获取numpy / scipy中的日志比率

时间:2013-04-15 20:21:02

标签: python numpy floating-point scipy logarithm

我正在尝试计算两个日志值ab的比率,然后将其转换回非日志值。由于这些是日志值,因此比率c为:

from numpy import *
c = a - b
# convert to non-log value
val = exp(c)

考虑这个例子:

a = -336929.42757
b = -334216.16795

因为这些是对数值,所以比率为:

c = -2713.259620000026

然后我将比率转换为非对数值并得到0

val = exp(c)

我该如何避免这种情况?如果没有这种行为,采用两个日志的比率并转换回非日志的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

嗯,您期望的数字太小,无法使用float来表示。 例如,在我的系统中:

In : sys.float_info.min_exp
Out: -1021

因此,你得到0.0

如果您只想将其与某个截止值进行比较,您仍然可以使用结果0.在您的情况下,“真实”无法代表的数字与0一样好。

答案 1 :(得分:2)

问题显然是exp(-2713.259620000026)没有浮点表示。但既然您知道数字的日志,那么您可以执行以下操作:

c10 = c/log(10.)

所以

x = 10**c10

或者,但是将整数和小数部分分开:

x = 4.29 x 10^(-1179)