web-dev-qa-db-ja.com

NumPyでの0による除算の警告を無視

統計の問題のための機能があります:

import numpy as np
from scipy.special import gamma as Gamma

def Foo(xdata):
    ...
    return x1 * (
                 ( #R is a numpy vector
                  ( ((R - x2)/beta) ** (x3 -1) ) * 
                  ( np.exp( - ((R - x2) / x4) ) ) /
                  ( x4 * Gamma(x3))
                 ).real
                )

シェルから次の警告が表示されることがあります。

RuntimeWarning: divide by zero encountered in...

Numpy isinf関数を使用して他のファイルの関数の結果を修正するため、この警告は必要ありません。

メッセージを無視する方法はありますか?つまり、シェルにこのメッセージを出力させたくないのです。

すべてのpython警告、これだけを無効にしたくありません。

28
overcomer

警告を無効にするには numpy.seterr 。ゼロ除算の前にこれを置きます:

np.seterr(divide='ignore')

これにより、ゼロ除算の警告がグローバルに無効になります。少し無効にしたいだけなら、 numpy.errstatewith句内:

with np.errstate(divide='ignore'):
    # some code here

ゼロによるゼロ除算(未決定、NaNの結果)の場合、エラーの動作はnumpyバージョン1.12.0で変更されました。これは、以前は「除算」であったのに対し、「無効」と見なされるようになりました。

したがって、分子がゼロになる可能性がある場合は、

np.seterr(divide='ignore', invalid='ignore')

または

with np.errstate(divide='ignore', invalid='ignore'):
    # some code here

リリースノート 、「新機能」セクションの前の最後の段落の「互換性」セクションを参照してください。

NaN浮動小数点数を比較すると、無効なランタイム警告が発生するようになりました。 NaNが予想される場合、np.errstateを使用して警告を無視できます。

64
dddsnn

除算にはnumpy.divideを使用することもできます。そうすれば、警告を明示的に無効にする必要はありません。

In [725]: np.divide(2, 0)
Out[725]: 0
3
fixxxer