2014-11-28 2 views
0

Я пытаюсь использовать некоторые модели с использованием Python/NumPy формы:Как обрабатывать функции с делением на ноль

f(x) = 1/(exp(x) - 1) 

где х может иметь любое значение в пределах от -5 до +5 сказать.

x может быть нулевым, и во время моих симуляций это происходит, заставляя f (x) стремиться к бесконечности, что возвращает nan + 1jnan.

Поскольку я хочу использовать результаты этого расчета позже, например, к FFT, это создает серьезную проблему, поскольку подпрограмма fft не может обрабатывать NAN на входе.

Есть ли какие-либо рекомендуемые способы борьбы с этим, пожалуйста? , например. полагая логику: if x == 0: return 0 или , например. смещение x на 0,00000001%, если оно равно нулю, чтобы избежать этой проблемы.

Благодаря

+0

Может быть, это полезно? https://github.com/kvesteri/infinity – adarsh

+0

'np.nan_to_num'? – YXD

+0

np.nan_to_num - полезное спасибо, но я бы хотел установить inf на 0, а не на какое-то сколь угодно большое число. Я могу сделать это вручную, хотя. – IanRoberts

ответ

0

Вы можете просто избежать этой проблемы, используя продолжают заявление:

def f(x): 
    return 1/(exp(x) - 1) 

f_values = {} 
for i in range(-5,5): 
    if i == 0: continue 
    f_values[i] = f(i) 

print f_values 
>>> {1: 0.5819767068693265, 2: 0.15651764274966565, 3: 0.05239569649125595, 4: 0.01865736036377405, -2: -1.1565176427496657, -5: -1.0067836549063043, -4: -1.018657360363774, -3: -1.052395696491256, -1: -1.5819767068693265} 


FFT(f_values) 

Здесь, когда значение х = 0 происходит, цикл просто позволяет избежать Р (х) функцию и итерации к следующему значению.