Last Updated on 2025年7月28日
概要
Pythonを使って数値計算やデータ解析を行う際、「FloatingPointError: invalid value encountered in sqrt」というエラーに遭遇することがあります。これは、主にNumPyなどの数学関数を扱う際に、非現実的な値(たとえば負の数の平方根など)を計算しようとしたときに発生します。本記事ではこのエラーの意味とその原因、具体的な対処法について詳しく解説します。
目次
エラー内容
このエラーはPythonにおいて以下のように出力されることがあります。
|
1 |
FloatingPointError: invalid value encountered in sqrt |
このメッセージは「平方根の計算中に無効な値(invalid value)が発生した」という意味です。特にNumPyのような数値演算ライブラリで多く見られるエラーです。
原因
このエラーの主な原因は、平方根を計算しようとする際に、その引数が負の数やNaN(Not a Number)であることです。
具体的な原因として以下のようなケースが挙げられます:
- マイナスの値に対して
np.sqrt()を使用 - データに欠損値(NaN)が含まれている
- ゼロ除算などにより
-infやNaNが発生 np.seterr()によって例外を明示的に発生させている
|
1 2 3 4 5 6 |
import numpy as np np.seterr(all='raise') x = np.array([-4, 0, 4]) y = np.sqrt(x) # -4に対して sqrt を適用しているため、FloatingPointErrorが発生する |
対処法
以下のような対策を講じることで、エラーの発生を防ぐことができます。
1. 条件チェックで負の値を除外
|
1 2 3 4 5 |
import numpy as np x = np.array([-4, 0, 4]) x = x[x >= 0] # 負の値を除外 y = np.sqrt(x) |
2. NaNやinfを事前に処理する
|
1 2 3 |
x = np.array([np.nan, 1, 4, -1]) x = x[np.isfinite(x) & (x >= 0)] y = np.sqrt(x) |
3. 警告だけにとどめる設定
|
1 |
np.seterr(all='warn') |
4. エラー発生箇所をtry-exceptで保護
|
1 2 3 4 |
try: y = np.sqrt(x) except FloatingPointError as e: print("浮動小数点エラーが発生しました:", e) |
5. np.sqrt()の代わりにnp.lib.scimath.sqrt()を使用
複素数対応の平方根計算関数を使うことで、負の値に対しても複素数として結果を得られます。
|
1 2 3 |
from numpy.lib.scimath import sqrt x = np.array([-4, 0, 4]) y = sqrt(x) # [-2.j, 0., 2.] |
補足
Pythonでは、浮動小数点演算におけるエラーはデフォルトでは警告(Warning)として処理され、プログラムの実行は停止しません。しかし、以下のように np.seterr を使って厳格に扱うことも可能です。
|
1 |
np.seterr(all='raise') |
このように設定すると、浮動小数点エラーが発生したときに、例外として扱われるようになります。開発段階やデバッグでは、この設定が問題の特定に役立ちます。
また、PandasのDataFrameを使っている場合は、欠損値や無限大を含む列に対して fillna() や replace() を活用して、事前に対処することも有効です。
まとめ
FloatingPointError: invalid value encountered in sqrtは、無効な値に対して平方根を計算したときに発生するエラー- 主な原因は負の数やNaNを含む配列に
np.sqrt()を適用した場合 - 対処法としては、事前のデータ検証、複素数対応の関数使用、またはNumPyのエラーハンドリング設定が有効
- 浮動小数点エラーを放置せず、明示的に制御することが、正確なデータ解析には重要


