次のような関数があるとします
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] )
1つの可能な実装は
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
これを行うより良い方法はありますか?
編集:また、警告を抑制するにはどうすればよいですか:
Warning: invalid value encountered in divide