Предположим, у вас есть функция, какЗакрепление особенность функции
F = lambda x: sin(x)/x
оценивающих F(0.0)
приведет деление на ноль предупреждения, и не даст ожидаемого результата 1.0
. Можно написать еще одну функцию fix_singularity
, которая даст желаемый результат при применении к вышеописанной функции, так что
fix_singularity(F)(0.0) == 1.0
Или формально fix_singularity
должен пройти следующие испытания:
import numpy as np
def test_fix_singularity():
F = lambda x: np.sin(x)/x
x = np.array((0.0, pi))
np.testing.assert_array_almost_equal(F(x), [nan, 0])
np.testing.assert_array_almost_equal(fix_singularity(F)(x), [1, 0])
Одним из возможных реализаций является
def fix_singularity(F):
""" Fix the singularity of function F(x) """
def L(x):
f = F(x)
i = np.isnan(f)
f[i] = F(x[i] + 1e-16)
return f
return L
Есть ли лучшие способы сделать это?
EDIT: Кроме того, как я могу подавить предупреждение:
Warning: invalid value encountered in divide
+1: Я на самом деле думаю, что это лучший ответ для конкретного случая OP. Раньше я не встречал этот метод. Хорошая работа. – JoshAdel