1. ホーム
  2. スクリプト・コラム
  3. パイソン

[解決済み】numpy: true_divide で無効な値に遭遇

2022-01-10 08:41:14

質問

Pythonで関数を実装したいのですが、2つのnumpy配列があり、一方の配列を他方の配列で割って、除数が0であれば、対応する結果は0に置き換えられます。

コードは以下の通りです。

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) です。

どのように解決するのですか?

を持つことがあります。 NAN , INF または NINF がどこかに浮かんでいます。これを試してみてください。

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

そのうちの1つまたは両方が返された場合 False それがランタイムエラーの原因である可能性が高いです。