修正方法: runtimewarning: double_scalars で無効な値が検出されました
Python で発生する可能性のあるエラーは次のとおりです。
runtimewarning: invalid value encountered in double_scalars
このエラーは、極端に小さい数値または極端に大きい数値を含む数学演算を実行しようとしたときに、Python が結果として NaN 値を生成するだけで発生します。
次の例は、このエラーを実際に修正する方法を示しています。
エラーを再現する方法
2 つの NumPy 配列を使用して次の数学演算を実行しようとするとします。
import numpy as np #define two NumPy arrays array1 = np. array ([[1100, 1050]]) array2 = np. array ([[1200, 4000]]) #perform complex mathematical operation n.p. exp (-3*array1). sum () / np. exp (-3*array2). sum () RuntimeWarning: invalid value encountered in double_scalars
分母の結果がゼロに非常に近いため、 RuntimeWarningが返されます。
これは、除算問題の答えが非常に大きくなり、Python ではそのような大きな値を処理できないことを意味します。
エラーを修正する方法
通常、このタイプのエラーを修正する方法は、計算で非常に小さい値または非常に大きい値を処理できる別の Python ライブラリの特別な関数を使用することです。
この場合、SciPy ライブラリのlogsumexp()関数を使用できます。
import numpy as np from scipy. special import logsumexp #define two NumPy arrays array1 = np. array ([[1100, 1050]]) array2 = np. array ([[1200, 4000]]) #perform complex mathematical operation n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2)) 2.7071782767869983e+195
結果は非常に大きくなりますが、これらの種類の数値を処理するように設計された SciPy ライブラリの特別な数学関数を使用したため、エラーは発生しないことに注意してください。
多くの場合、これらの関数は科学計算用に特別に設計されているため、極端な数学演算を処理できるSciPy ライブラリ内の特別な関数を探す価値があります。
注: logsumexp()関数の完全なオンライン ドキュメントは、ここで見つけることができます。
追加リソース
次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。
パンダの KeyError を修正する方法
修正方法: ValueError: float NaN を int に変換できません
修正方法: ValueError: オペランドをシェイプでブロードキャストできませんでした