Pythonのmathモジュール徹底解説!定数・数値処理・対数・三角関数の使い方
Pythonで単純な計算から複雑な数学的演算(三角関数、対数計算など)まで行うには、mathモジュールを利用するのが便利です。mathモジュールはPythonに標準で組み込まれている数学関数集であり、さまざまな数値計算を簡単に実装できます。
なお、mathモジュールのすべてのメソッドは整数型や浮動小数点型などの実数オブジェクトに対して使用でき、複素数には対応していません。複素数を扱いたい場合は別途 cmath モジュールを使用します。
mathモジュールを使うには、コードの先頭でインポートを行います。
import math
mathモジュールで使える主な定数
mathモジュールには、計算でよく使われる定数があらかじめ定義されています。
| 定数 | 説明 |
|---|---|
| math.pi | 円周率πの値(約3.141592) |
| math.e | 自然対数の底eの値(約2.718282) |
| math.tau | タウ(τ = 2π)の値(約6.283185) |
| math.inf | 正の無限大を返す |
| math.nan | 非数(Not a Number)を表す値 |
数値の丸めや判定に関する関数
Pythonでは、数値をさまざまな形式で表現したり、性質を判定したりするための関数が多数用意されています。代表的なものは以下の通りです。
| 関数 | 説明 |
|---|---|
| ceil(x) | x以上の最小の整数(天井値)を返す |
| copysign(x, y) | xの絶対値にyの符号を付けて返す |
| fabs(x) | xの絶対値を返す |
| factorial(x) | xの階乗を返す(x >= 0 の場合) |
| floor(x) | x以下の最大の整数(床値)を返す |
| fsum(iterable) | イテラブル内の要素の合計を高精度で返す |
| gcd(x, y) | xとyの最大公約数を返す |
| isfinite(x) | xが無限大でもNaNでもないかどうかを判定 |
| isinf(x) | xが無限大かどうかを判定 |
| isnan(x) | xが非数(NaN)かどうかを判定 |
| remainder(x, y) | xをyで割った余りを返す |
それでは、これらの数学関数の使い方を示すサンプルプログラムを見てみましょう。
# mathライブラリをインポート
import math
# 床値と天井値
print('9.45の天井値と床値: ' + str(math.ceil(9.45)) + ', ' + str(math.floor(9.45)))
# 符号のコピー
copysign_x = 94
copysign_y = -27
print('yの符号をコピーしたxの値: ' + str(math.copysign(copysign_x, copysign_y)))
# 絶対値
print('-94と54の絶対値: ' + str(math.fabs(-94)) + ', ' + str(math.fabs(54)))
# fsumとgcd
my_list = [12, 9.25, 89, 3.02, -75.23, -7.2, 6.3]
print('リストの要素の合計: ' + str(math.fsum(my_list)))
print('24と56の最大公約数: ' + str(math.gcd(24, 48)))
# isnan
x = float('nan')
if math.isnan(x):
print('これは数値ではありません')
# isinf
x = float('inf')
if math.isinf(x):
print('これは無限大です')
# xは有限の数ではない
print(math.isfinite(x))
# yは有限の数である
y = 54
print(math.isfinite(y))実行結果
9.45の天井値と床値: 10, 9 yの符号をコピーしたxの値: -94.0 -94と54の絶対値: 94.0, 54.0 リストの要素の合計: 37.13999999999999 24と56の最大公約数: 8 これは数値ではありません これは無限大です False True
このように、ceil()とfloor()で切り上げ・切り捨て、copysign()で符号の付け替え、isnan()やisinf()で特殊な値の判定まで、直感的に記述できるのが分かります。
べき乗・平方根・対数を求める関数
次に紹介するのは、べき乗や対数に関連した計算を行うための関数群です。
| 関数 | 説明 |
|---|---|
| pow(x, y) | xのy乗を返す |
| sqrt(x) | xの平方根を返す |
| exp(x) | eのx乗(e ≒ 2.718281)を返す |
| log(x[, base]) | 指定した底におけるxの対数を返す(省略時は自然対数) |
| log2(x) | 底が2の対数(log₂x)を返す |
| log10(x) | 底が10の常用対数(log₁₀x)を返す |
使用例プログラム
import math
print("2の5乗: " + str(math.pow(2, 5)))
print("625の平方根: " + str(math.sqrt(625)))
print("eの5乗: " + str(math.exp(5)))
print("底5のlog(625): " + str(math.log(625, 5)))
print("底10のlog(1024): " + str(math.log10(1024)))
print("底2のlog(1024): " + str(math.log2(1024)))実行結果
2の5乗: 32.0 625の平方根: 25.0 eの5乗: 148.4131591025766 底5のlog(625): 4.0 底10のlog(1024): 3.010299956639812 底2のlog(1024): 10.0
三角関数と角度変換の関数
mathモジュールには、さまざまな三角関数の演算を行う関数も用意されています。引数として与える角度はラジアン単位である点に注意してください。
| 関数 | 説明 |
|---|---|
| sin(x) | x(ラジアン)の正弦(サイン)を返す |
| cos(x) | x(ラジアン)の余弦(コサイン)を返す |
| tan(x) | x(ラジアン)の正接(タンジェント)を返す |
| asin(x) | サインの逆関数(アークサイン)を返す。同様にacos、atanもある |
| degrees(x) | 角度xをラジアンから度に変換する |
| radians(x) | 角度xを度からラジアンに変換する |
使用例プログラム
import math
print("sin(45度)の値: " + str(math.sin(math.radians(45))))
print("cos(pi)の値: " + str(math.cos(math.pi)))
print("tan(pi/2)の値: " + str(math.tan(math.pi/2)))
print("sin(0.95504050560)の角度への変換: " + str(math.degrees(math.asin(0.95504050560))))実行結果
sin(45度)の値: 0.7071067811865475 cos(pi)の値: -1.0 tan(pi/2)の値: 1.633123935319537e+16 sin(0.95504050560)の角度への変換: 72.89717295472119
度数法で入力したい場合はradians()でラジアンに変換してから渡すのがポイントです。また、tan(pi/2)が巨大な値になるのは、π/2が厳密な90度ではないために生じる浮動小数点数の誤差によるものです。
-
Pythonのmathモジュール完全ガイド|定数・数値関数・べき乗・三角関数の使い方
Pythonのmathモジュールとは Pythonのmathモジュールは、数学計算のための関数や定数をまとめた標準ライブラリです。このモジュールの関数は整数型や浮動小数点型(実数)のオブジェクトを対象としており、複素数には対応していません。複素数を扱いたい場合は、代わりにcmathモジュールを使用します。 mathモジュールを利用するには、まずコード内でインポートします。 import math mathモジュールの主な定数 mathモジュールには、計算式の中でそのまま使える便利な定数が用意されています。 番号定数と説明 1pi円周率πの値を返します(3.141592…)。 2E自然対数
-
Pythonの文字列で数式を計算する方法:eval関数の使い方と注意点
Pythonでは、eval関数を使うことで、文字列として記述された数学式(数式表現)を実際に評価し、計算結果を取得できます。基本的な使い方例えば、(4*5) + 22 のように数式が含まれた文字列がある場合、それをevalに渡すだけで計算結果を得ることができます。>>> s = (4*5) + 22 >>> eval(s) 42evalの評価ルールevalは、括弧が省略された場合の演算子の優先順位などを含め、Pythonの通常の数式評価ルールに従って処理を行います。そのため、同じ式をPythonコードとして直接書いた場合とまったく同じ結果になります。セキュリ