2015-01-08 15 views
6

私は2つのnumpy配列を持っていますが、もう一方を分割しようとしていますが、同時に除数が0のエントリを0numpy:true_divideで無効な値が発生しました

だから、私のようなものです:これは私の実行時間警告与え

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0) 

:今

RuntimeWarning: invalid value encountered in true_divide 

を、私は何が起こっていたか見てみたかったし、私がやりました以下:

xx = np.isfinite(diff_images) 
print (xx[xx == False]) 

xx = np.isfinite(b_0) 
print (xx[xx == False]) 

ただし、両方とも空の配列を返すと、配列のすべての値が有限であることを意味します。だから、無効な値がどこから来ているのか分かりません。 np.where関数のb_0> 0が0で除算されることを前提としています。

2つの配列の形状は(96,96,55,64)と(96,96,55,1)です。 )

+0

なぜ 'xx'は' False'となりますか? – seequ

+0

私はisfiniteがブール値の配列を返すと思います。だから、私は値が有限ではない場所を探しています。 – Luca

+0

x == Falseの場合、 '[x for xx xx]を試してください。あなたは単に 'False'のキーを取得しようとしているだけです。 – seequ

答えて

5

NANINF、またはNINFがどこかに浮かんでいる可能性があります。これを試してみてください:

np.isfinite(diff_images).all() 
np.isfinite(b_0).all() 

は、1つまたはそれらのリターンFalseの両方の場合は、その可能性が高いランタイムエラーの原因です。

+0

これが発生する複数の要素を持つ配列の真理値はあいまいです。 a.any()またはa.all()を使用する – Luca

+0

@Luca申し訳ありません、答えを編集しました - 多次元配列を1秒間処理していたことを忘れていました。 :) – rchang

+0

ありがとうございます。彼らはどちらも真実を返します:/ – Luca

関連する問題