Numpyではゼロで割っても例外が飛ばない
飛ぶと思い込んでいたので、ここで入ったnanのせいでしばらく進んでから逆行列を求める計算LinAlgError: Singular matrixで死ぬのに悩まされた。
>>> array([0]) / 0.0 array([ nan]) >>> array([1]) / 0.0 array([ inf])
NaNやInfが出てきた時点で例外を飛ばすオプションとかないかなぁ。プロトタイピングではfail fast重要ですよー。
numpy.seterrで例外を飛ばすように設定できるらしい!(thanks @shima__shima)
>>> numpy.seterr(all="raise") # 変更前の値が返ってくる {'divide': 'warn', 'invalid': 'warn', 'over': 'warn', 'under': 'ignore'} >>> array([1]) / 0 --------------------------------------------------------------------------- FloatingPointError Traceback (most recent call last) /Users/nishio/cur/prml/<ipython-input-525-de9a636bcadc> in <module>() ----> 1 array([1]) / 0 FloatingPointError: divide by zero encountered in divide