2012-05-09 14 views
14

私は実験的なデータに合わせるために使用できる数学的関数を返す簡単な関数を設計しました。機能はかなり次のようになりますため、大きすぎるか、または小さい値にPython:関数定義でnumpy RuntimeWarningを避けるには?

RuntimeWarning: overflow encountered in power 
RuntimeWarning: overflow encountered in divide 

def colecole_2(f,*p): 
    term1=p[0] * (1 - 1/(1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[1], p[2]))) 
    term2=p[3] * (1 - 1/(1 + numpy.power((0+1j) * 2 * numpy.pi * f * p[4], p[5]))) 
    return p[6]*(1-abs(term1+ term2)) 

残念ながら、私はとRunTimeWarningsとのトラブルに遭遇します。私は自分自身でこの問題を理解することができません。関数を再定義して警告なしで渡す方法はありますか?

+0

例外をキャッチする方法は知っていますか? –

+0

@StevenRumbalski、これは上げられませんでした。 –

+0

@MikeGraham:悪いです。私はあなたの質問を誤解した*と*彼らが警告だったことを逃した*。 ( "非推奨"、DeprecationWarning) warnings.warn warnings.catch_warnings()と : warnings.simplefilter( "無視") FXN warnings.htmlのreference.import警告 DEF FXN()で与えられる –

答えて

30

あなたはnumpy.errstateを使用することができます内蔵のコンテキストである:http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html

は警告があるか提示されない方法を制御するための警告モジュールを使用しますマネージャー。これにより、誤った手渡しをwithステートメントのコンテキスト内に設定できるようになります。

import numpy 
# warning is not logged here. Perfect for clean unit test output 
with numpy.errstate(divide='ignore'): 
    numpy.float64(1.0)/0.0 

私は最近、いくつかのレガシーPythonコードの単体テストを書くときにこれを行う必要がありました。

+0

これまでのところ最高の答えです。シンプルで読みやすい。 –

2

これを回避するには、関数を呼び出す配列要素の型を変更して精度を上げることができます。例えば

、大きな浮動小数点数によって要素として多数でアレイを掛ける場合には警告が発生していない以下

a = np.array(a, dtype=np.float128) 

を指定する際に例外

RuntimeWarning: overflow encountered in multiply 

を上昇させます。

関連する問題