1. ホーム
  2. コンパイラ言語
  3. パイソン

PythonでRuntimeWarning: invalid value encountered in double_scalars問題を解決する方法

2022-01-21 08:13:09

ピアソンのクラス相関係数を計算するコードを書いていたら、以下の警告に遭遇しました。

RuntimeWarning: double_scalars で無効な値に遭遇しました。

該当するコードスニペットは以下の通りです。(上記のプロンプトは、以下のステートメントの実行中に表示されます)

id_col=(t_fa*id_part).sum()/(item_squre_rating[id]*item_squre_rating[col])

まず、最初のポイントは以下の通りです。

  • これは警告であって、エラーではありません。だから、実行時に表示されても、コードは問題なく動作する。しかし同時に、これはエラーではないので、try-exceptを使用しても捕捉されません。
  • このヒントは通常0/0で発生しますが、分母が0の場合はZeroDivisionError(0÷例外)が発生しないことも意外と知られていないようです。
  • 解決方法 if-else ステートメントを使用して、分母が 0 になったときに id_col を再割り当てするように判断します。

ここでは、ZeroDivisionError例外とRuntimeWarning警告の違いと、どのような状況でこの2種類のヒントが発生するのかを簡単に説明します。

  • ZeroDivisionError例外は、分母0が組み込みのデータ型である場合に発生します。

  •  分母0がnumpyのデータ型である場合、RuntimeWarningの警告をトリガーします。

  •  組み込みデータ型がnumpyデータ型で計算される場合、計算結果はnumpyで計算された型になります。

私のコードのRuntimeWarningヒントは、計算の分子部分がnumpy.float64型だからで、分子部分もnumpy.float64に変更すれば、0で割ったときにエラーにならないはずです。