FloatingPointError: invalid value encountered in sqrt

Last Updated on 2025年7月28日

概要

Pythonを使って数値計算やデータ解析を行う際、「FloatingPointError: invalid value encountered in sqrt」というエラーに遭遇することがあります。これは、主にNumPyなどの数学関数を扱う際に、非現実的な値(たとえば負の数の平方根など)を計算しようとしたときに発生します。本記事ではこのエラーの意味とその原因、具体的な対処法について詳しく解説します。

目次

エラー内容

このエラーはPythonにおいて以下のように出力されることがあります。

このメッセージは「平方根の計算中に無効な値(invalid value)が発生した」という意味です。特にNumPyのような数値演算ライブラリで多く見られるエラーです。

原因

このエラーの主な原因は、平方根を計算しようとする際に、その引数が負の数やNaN(Not a Number)であることです。

具体的な原因として以下のようなケースが挙げられます:

  • マイナスの値に対して np.sqrt() を使用
  • データに欠損値(NaN)が含まれている
  • ゼロ除算などにより -infNaN が発生
  • np.seterr() によって例外を明示的に発生させている

対処法

以下のような対策を講じることで、エラーの発生を防ぐことができます。

1. 条件チェックで負の値を除外

2. NaNやinfを事前に処理する

3. 警告だけにとどめる設定

4. エラー発生箇所をtry-exceptで保護

5. np.sqrt()の代わりにnp.lib.scimath.sqrt()を使用

複素数対応の平方根計算関数を使うことで、負の値に対しても複素数として結果を得られます。

補足

Pythonでは、浮動小数点演算におけるエラーはデフォルトでは警告(Warning)として処理され、プログラムの実行は停止しません。しかし、以下のように np.seterr を使って厳格に扱うことも可能です。

このように設定すると、浮動小数点エラーが発生したときに、例外として扱われるようになります。開発段階やデバッグでは、この設定が問題の特定に役立ちます。

また、PandasのDataFrameを使っている場合は、欠損値や無限大を含む列に対して fillna()replace() を活用して、事前に対処することも有効です。

まとめ

  • FloatingPointError: invalid value encountered in sqrt は、無効な値に対して平方根を計算したときに発生するエラー
  • 主な原因は負の数やNaNを含む配列に np.sqrt() を適用した場合
  • 対処法としては、事前のデータ検証、複素数対応の関数使用、またはNumPyのエラーハンドリング設定が有効
  • 浮動小数点エラーを放置せず、明示的に制御することが、正確なデータ解析には重要