【Python入門】Pythonの色々なルート計算方法をマスターしよう!

こんにちは! プログラマーのakiraです。

PythonではmathモジュールやNumPyを使用して、さまざまな演算やルート計算を行えます。

「Pythonでルートの計算はどうやるの?」
「NumPyのルートの計算はどうやるの?」

そのような悩みを抱えている人に向けて、この記事では以下の内容で解説していきます!


・ mathを使用したルートの計算方法
・ NumPyでのルート計算方法
・ mathとNumPyのルート計算の比較

mathモジュールやNumPyを使用すれば、複雑な計算も簡単に行えます!

是非参考にしてくださいね!

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

mathを使用してルートの計算をしてみよう!

mathモジュールは、標準で提供されている数学計算のモジュールです。

このmathを使用したルートの計算方法を詳しく見ていきましょう!

mathでよく使われている数学関数を詳しく知りたい!という方は以下の記事にまとめられていますので参考にしてください!

math.sqrtの使い方

Pythonでmathモジュール使用するには、まずimport文でmathを読み込む必要があります。

以下の実行書式を見てください!

まずプログラムの先頭で忘れずにmathをimportしてあげてください!
求めたいルートの値をxに入れることで、ルート計算の結果を得ることができます!

import math

math.sqrt(x)

次項で実際にサンプルコードを実行して、ルート計算をより詳しく見ていきましょう!

ルート計算の基礎

それでは実際にサンプルコードを実行してルートの計算を見ていきましょう!

以下のサンプルコードでは、「math.sqrtの使い方」の項で説明した書式のx部分に1〜5までの数値を入力しています。

実行結果では、入力した1〜5までのルートの計算結果が出力されていることがわかるかと思います!

import math

print("√1")
print(math.sqrt(1))

print("√2")
print(math.sqrt(2))

print("√3")
print(math.sqrt(3))

print("√4")
print(math.sqrt(4))

print("√5")
print(math.sqrt(5))

実行結果

√1
1.0
√2
1.4142135623730951
√3
1.7320508075688772
√4
2.0
√5
2.23606797749979

色々なルートの計算をしてみよう!

それでは、基礎で学んだことを応用して、様々なルートの計算をしてみましょう!

以下のルート計算をmathでやってみましょう!
2√3 + 3√3
2√3 + 3√5

2√3 → 「2 * math.sqrt(3)」、 3√3 → 「3 * math.sqrt(3)」、3√5 → 「3 * math.sqrt(5)」とすることでPythonでルートの計算もできるのです!

import math

result1 = 2 * math.sqrt(3) + 3 * math.sqrt(3)
print("result1")
print(result1)

result2 = 2 * math.sqrt(3) + 3 * math.sqrt(5)
print("result2")
print(result2)

実行結果

result1
8.660254037844386
result2
10.172305547637123

次は、ルートの大小比較をやってみましょう!

以下の値の大小を不等号で表してみましょう!
・ 6√3、 3、 2√2

import math

x = 3
y = 2 * math.sqrt(2)
z = 6 / math.sqrt(3)

print(x)
print(y)
print(z)

実行結果

3
2.8284271247461903
3.464101615137755

実行結果より、

2√2 < 3 < 6√3
の大小関係であることがわかりましたね!

NumPyを使用してルートの計算をしてみよう!

今度はNumPyを使用してルートの計算をしていきましょう!

NumPyとは、Pythonの学術計算ライブラリになります!
ndarrayというNumPyの配列を使用し、高速に少ないコード量で様々な数値計算が行えます。

NumPyの四則演算や様々な数学計算はこちらの記事にも紹介されていますので参考にしてください!

np.sqrtの使い方

NumPyでルートの計算をするには、まずimport文でnumpyの読み込みを行います!

以下の実行書式のように、NumPyをimport後にx部分に値を入力することで、ルート計算の結果を得ることができます!

import numpy as np

np.sqrt(x)

次項でさっそくNumPyを使用したルート計算をやっていきましょう!

ルート計算の基礎

それでは、mathルート計算で学習したものと同様にサンプルコードを実行してNumPyのルート計算も見ていきましょう!

np.sqrt(x)のx部分に1〜5までの数値を入力し、ルート計算を行っています!

import numpy as np

print("√1")
print(np.sqrt(1))

print("√2")
print(np.sqrt(2))

print("√3")
print(np.sqrt(3))

print("√4")
print(np.sqrt(4))

print("√5")
print(np.sqrt(5))

実行結果

√1
1.0
√2
1.4142135623730951
√3
1.7320508075688772
√4
2.0
√5
2.23606797749979

色々なルートの計算をしてみよう!

それではNumPyを使用して、色々なルート計算をしてみましょう!

mathでルート計算をした時と同様に、2√3 → 「2 * np.sqrt(3)」、 3√3 → 「3 * np.sqrt(3)」とすることでNumPyでもルートの計算ができるのです!

またNumPyでは、NumPyとはで解説したndarrayを使用して簡単に多次元の配列の計算が可能となります。

ここでは、全要素が√2の行列(2 × 2)であるarrを掛け算して、各要素がそれぞれ2になっていることがわかるかと思います!

import numpy as np

result1 = 2 * np.sqrt(3) + 3 * np.sqrt(3)
print("result1")
print(result1)


arr = np.full((2,2), np.sqrt(2))
print("arr")
print(arr)

result2 = arr * arr
print("result2")
print(result2)

実行結果

result1
8.660254037844386
arr
[[1.41421356 1.41421356]
 [1.41421356 1.41421356]]
result2
[[2. 2.]
 [2. 2.]]

mathとNumPyのルート計算を比較してみよう!

これまでルート計算の方法について、mathとNumPyを使用する方法について見てきました!

今回は、両者の違いやどう使い分けるべきかについても見ていきましょう!

異なっている点を確認しよう!

これまでのルート計算で見てきましたがmathと比較して、NumPyのルート計算では多次元配列の計算も簡単にできることがわかりましたね!

それでは、次は時間を計測して比較してみましょう!
timeモジュールは、時間計測に用いることができるモジュールです。

timeモジュールの詳しい説明はこちらの記事を見てみてください!

import time
import math
import numpy as np

start = time.time()
for _ in range(10000000):
    math.sqrt(100)
print('math time: {}'.format(time.time() - start))


start = time.time()
for _ in range(10000000):
    np.sqrt(100)
print('np time: {}'.format(time.time() - start))

実行結果

math time: 1.2254984378814697
np time: 9.516222953796387

実行速度についてはプログラムを実行する環境にも左右されますが、実行結果よりmathの方が早いのは確かであるかと思います。

それぞれの用途について確認しよう!

前項でmathとNumPyの実行速度について確認し、mathの方が早いことがわかりました!
それでは、Pythonにおける計算は全てmathを使用した方が良いのでしょうか?

私はそれは計算の用途次第になるかと思います!

mathは単純な数値計算が高速な一方で、行列などの多次元配列の計算を行うには手間がかかり、Pythonで複雑な処理をすることになると結果的に遅くなってしまう場合もあるかと思います。

その点NumPyは多次元配列を簡単に扱うことができ、複雑な処理でも少ないコードで高速に計算できるようになっているのです。

つまり、単純な数値計算ではmath、行列などの多次元配列を用いて計算する場合はNumPyとそれぞれの用途で使い分けるのが良いかと思います!

まとめ

いかがでしたでしょうか。
今回は、mathやNumPyを使用したルートの計算について学習しました!

Pythonはルート計算などの数値計算ライブラリが充実していて様々な方法がありますが、それぞれの特徴を理解してうまく使い分けができるといいですね!

この記事を書いた人

インフラエンジニア→プログラマー。趣味は3歳の子供にPCの使い方、タイピングを教えること。業務ではPython, PHP, Javaなどやってます。

目次