これは部分的にはhereと回答しています。numpy runtimewarningを例外としてキャッチして抑制する
とにかく私は自分が望むものを達成しているとは確信していません。私は何をしているのかを簡単に説明します: ネストされた構造を持つjsonファイルの巨大なリストを通して、読んでください:
- これらの値が最も低い値を抽出し、これらの値がリストである場合に平均化します。
- これらの値をnumpy配列に集めます。
- 私のnumpy配列をpickledファイルにダンプします。
すべてが非常にスムーズになりますが、私はいくつかのnumpyのランタイムの警告が表示されます。私の悩みを与える
RuntimeWarning: Mean of empty slice.
RuntimeWarning: invalid value encountered in double_scalars
機能は、実際にどの値を抽出一つですこの操作を実行します:v = np.mean(v)
私は、ゼロのリストやNaN/Infなどの値が原因でエラーが発生する可能性があることを知っています。
データセットから現在の.jsonサンプルを捨てるだけで、それらを取り除きたいと思います。
は、だから私は設定しました:np.seterr(all='warn')
そして、私はそれをキャッチしようとするために、この厄介なコードを作った:ので、
def ExtracValues(d):
for v in d.values():
if isinstance(v, dict):
yield from ExtracValues(v)
else:
if isinstance(v,list):
# v = np.mean(v) #just averaging vectorial values of features. #it may be here that raises the empty slice warning of numpy.
try:
v = np.mean(v)
except Warning:
return #trying to trash samples which are no behaving good
yield v
私の問題は、それが効果的に働いている場合、私は知らないということです警告はstdoutに出力されます。 all="Warning"
を設定したらコードが停止しているはずですが、どうすれば簡単に確認できますか?
また、その機能を短縮するためには、もっとpythonicな方法があります。私は本当にそのように入れ子になってtry/except
が好きではありません。
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
np.mean([])
このコードは、任意の実行時の警告を与えることはありません、私はあなたが必要なもののために、このコードを適応させることができますね。
numpy.seterr(all = 'warn')によって、毎回警告するようにシステムに指示します。これは、あなたが望むものとまったく逆です。しかし、np.seterr(all = 'ignore')でも問題を取り除かないので、警告はnp.seterrによってキャッチされていないようです。 –
[警告](https:// docs.python.org/2/library/warnings.html)モジュールを使用していましたが、それを修正する方法と場所はまだ分かりません。 – sparaflAsh