2013-04-15 1 views
1

Я пытаюсь рассчитать соотношение двух значений журнала a и b, а затем преобразовать их обратно в значения, отличные от log. Поскольку эти значения бревенчатые, отношение c является:брать отношения журналов в numpy/scipy в Python

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) 

Как я могу избежать этого? Каков правильный способ принять соотношение двух журналов и преобразовать обратно в не-журнал без такого поведения?

+0

Как вы вычислить значения, которые вы присваиваете 'a' и' b'? – shx2

+0

Я выполняю всю арифметику в значениях журнала, поэтому 'a' и' b' являются результатом арифметики значений журнала. Я просто беру 'log (...)' вещей и добавляю их/вычитаю их в итоге с двумя значениями, отношение которых я хочу сравнить – user248237dfsf

+1

Окончательный ответ ~ 4.429e-1179, который слишком мал для хранения в поплавком объекте. Это действительно номер, который вы хотите? – DSM

ответ

2

Проблема заключается в том, что exp (-2713.259620000026) не изображен хорошо поплавком. Но так как вы знаете, журнал числа, вы могли бы сделать что-то вроде:

c10 = c/log(10.) 

так

x = 10**c10 

или, но разделяющого целые и дробные части:

x = 4.29 x 10^(-1179) 
3

Ну, число, которое вы ожидаете, слишком мало для представления, используя float. Например, в моей системе:

In : sys.float_info.min_exp 
Out: -1021 

Для этого, вы получаете 0.0

Если вы хотите, чтобы сравнить его с какой-то порогового значения, вы можете использовать получившуюся 0. «реальный» непредставимо число равно 0 в вашем случае.