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