Pythonで平方根を計算する方法を解説

Python

本記事では、Pythonで平方根を計算する方法を解説します。計算方法はいくつかあり、それぞれの特徴を比較しながら、どの方法を使うべきかを説明します。

平方根を計算する方法

math.sqrt()(推奨)

Pythonの標準ライブラリmathモジュールには、平方根を求めるsqrt()関数が用意されています。

使い方

import math

num = 16
result = math.sqrt(num)
print(result)  # 4.0
  • math.sqrt(x)x の平方根を計算 します。
  • 引数 x は 0 以上の数 である必要があります(負の数を渡すと ValueError になる)。

負の数の平方根を求める

負の数の平方根を求める場合、math.sqrt()はValueErrorを出します。これを回避するには 複素数を扱う cmath モジュール を使います。

import cmath

num = -16
result = cmath.sqrt(num)
print(result)  # (0+4j)

cmath.sqrt(x)を使うと、負の数の平方根を複素数(j: 虚数単位)として計算 できます。

mathモジュールのsqrt()は他の方法よりも高速エラーハンドリングがしやすいため推奨されています。

** 演算子(べき乗演算子)

Pythonでは**演算子を使ってべき乗を計算できます。平方根は 1/2乗 なので、以下のように計算できます。

使い方

num = 16
result = num ** 0.5
print(result)  # 4.0
  • x ** 0.5math.sqrt(x)と同じ結果になります。
  • 負の数に適用すると ValueError になる ので、複素数の平方根を求める場合はcmathを使う必要があります。

numpy.sqrt()

numpy は数値計算のライブラリで、numpy.sqrt() を使うと配列の要素ごとに平方根を計算できます。

使い方

import numpy as np

arr = np.array([1, 4, 9, 16, 25])
result = np.sqrt(arr)
print(result)  # [1. 2. 3. 4. 5.]
  • numpy.sqrt(x)配列に対しても適用可能 なので、リストや numpy 配列の要素を一括で平方根にできます。

負の数の平方根を求める

負の数を含む配列に numpy.sqrt() を適用すると NaN(Not a Number)になります。

arr = np.array([-1, 4, 9, -16])
result = np.sqrt(arr)
print(result)  # [nan  2.  3. nan]

これを回避するには、numpy の複素数版 numpy.sqrt() を使います。astypeで配列を複素数型に変換しています。

result = np.sqrt(arr.astype(complex))
print(result)  # [0.+1.j 2.+0.j 3.+0.j 0.+4.j]

sympy.sqrt()

sympy を使うと 正確な分数やルートのまま計算 できます。

使い方

import sympy

num = 16
result = sympy.sqrt(num)
print(result)  # 4

result2 = sympy.sqrt(8)
print(result2)  # 2*sqrt(2)
  • sympy.sqrt(x)小数ではなく数式の形で結果を保持 します。
  • ルートを含んだままの形で計算したい場合に便利です。

ニュートン法

数学的には、平方根を ニュートン法 で近似計算できます。

ニュートン法で平方根を求める

def sqrt_newton(x, epsilon=1e-10):
    if x < 0:
        raise ValueError("負の数の平方根は求められません")

    guess = x / 2  # 初期値
    while abs(guess ** 2 - x) > epsilon:
        guess = (guess + x / guess) / 2  # ニュートン法の反復計算
    return guess

print(sqrt_newton(16))  # 4.0
print(sqrt_newton(2))  # 約1.414
  • 収束精度をepsilonで調整可能。
  • math.sqrt()の代わりに使うこともできるが、ライブラリを使う方が高速。

まとめ

方法説明特徴
math.sqrt(x)標準ライブラリほとんどのケースで推奨
** 0.5べき乗演算シンプルだが math.sqrt() より遅い
numpy.sqrt(x)数値計算ライブラリ配列対応、負の数は nan
cmath.sqrt(x)複素数対応負の数の平方根を計算可能
sympy.sqrt(x)数式処理ライブラリルートのまま計算可能
ニュートン法近似計算自作アルゴリズムが必要

ほとんどのケースではmath.sqrt(x) が推奨されますが、状況に応じてnumpycmath も活用できます。

どの方法を使うべきか?

  • 最も推奨される方法
    • math.sqrt(x)(高速で安全)
    • numpy.sqrt(x)(配列対応)
  • 負の数の平方根が必要な場合
    • cmath.sqrt(x)(複素数対応)
    • numpy.sqrt(x.astype(complex))(配列の複素数対応)
  • ルートの形を保持したい場合
    • sympy.sqrt(x)
  • 独自のアルゴリズムを学びたい場合
    • ニュートン法

Pythonで平方根を求めるには、用途に応じた適切な方法を選ぶことが重要です。ほとんどのケースではmath.sqrt(x)が最も適しているため、特別な理由がなければmath.sqrt(x)を使いましょう。

タイトルとURLをコピーしました