音信号処理のプログラムを書いていると、
import numpy as np y_array = np.log10(x_array)
のように対数をとることがよくあります。
ここで、x_array には 0 が含まれていることが多々あり、その場合には
RuntimeWarning: divide by zero encountered in log10
と warning が出力されてしまいます。
これを手際よく解決する手段を調べてみると、numpy.errstate()
という関数があることが分かりました。
numpy.errstate — NumPy v1.19 Manual
使用例:
import numpy as np spec = np.random.random(5) spec[2] = 0.0 np.log10(spec) #>>> RuntimeWarning: divide by zero encountered in log10 #>>> array([-0.94448398, -0.05531926, -inf, -0.44129004, -0.17107346]) with np.errstate(divide='ignore'): np.log10(spec) #>>> array([-0.94448398, -0.05531926, -inf, -0.44129004, -0.17107346])
また、上記の例では入力が0の場合のwarningでしたが、np.errstate(invalid='ignore')
とすることで、対数の入力が負の時に発生するwarningも非表示にできます。
a = -1 with np.errstate(divide='ignore'): np.log10(a) #>>> RuntimeWarning: invalid value encountered in log10 #>>> nan with np.errstate(divide='ignore', invalid='ignore'): np.log10(a) #>>> nan