mathモジュール
前回、Pythonプログラムのファイル名をライブラリ名にした時に起こるエラーに関して紹介しました。
今回は数学計算用モジュールである「math」を色々試してみようと思います。
mathモジュールはPythonの標準ライブラリの一つなのでインストールせずに使用することができます。
それでは始めていきましょう。
定数: π、tau、e、inf、nan
まずは数学で用いる定数からです。
円周率のπ、円周率の2倍であるtau、自然対数の底e、無限大のinf、欠損値のnanなどがあります。
import math
print(math.pi)
print(math.tau)
print(math.e)
print(math.inf)
print(math.nan)
実行結果
3.141592653589793
6.283185307179586
2.718281828459045
inf
nan
切り上げceil、切り下げfloor、小数部を取り除くtrunc、小数部分と整数部分を返すmodf
小数を常に大きな方の整数に切り上げるには「ceil」、常に小さな方の整数に切り下げるには「floor」を用います。
import math
print(math.ceil(1.2))
print(math.ceil(-1.2))
print(math.floor(1.2))
print(math.floor(-1.2))
実行結果
2
-1
1
-2
ちなみに小数から整数に変更する際の小数点以下の取り扱い(切り捨て、四捨五入、切り上げ、切り下げ)に関してはこちらの記事で解説していますので、よかったらどうぞ。
また小数部分を取り除き、整数部分だけにする場合は「trunc」を用います。
import math
print(math.trunc(1.23))
print(math.trunc(-1.23))
実行結果
1
-1
小数部分、整数部分をそれぞれ取得する場合は「modf」を用います。
import math
print(math.modf(5.12))
print(math.modf(-5.12))
実行結果
(0.1200000000000001, 5.0)
(-0.1200000000000001, -5.0)
絶対値fabs
mathモジュールで絶対値を取得する場合は「fabs」を用います。
import math
print(math.fabs(10))
print(math.fabs(-10))
実行結果
10.0
10.0
mathモジュールのfabsではfloatとして返されるのが特徴です。
また絶対値を取得するには「abs」、numpyの「abs」などもあります。
print(abs(10))
print(abs(-10))
実行結果
10
10
import numpy as np
print(np.abs(10))
print(np.abs(-10))
実行結果
10
10
これらの場合はintとして返ってきます。
階乗factorial
ある数の階乗を取得するには「factorial」を用います。
import math
print(math.factorial(3))
print(math.factorial(5))
実行結果
6
120
ちなみに小数値や負の値ではエラーとなります。
import math
print(math.factorial(3.1))
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[23], line 3
1 import math
----> 3 print(math.factorial(3.1))
TypeError: 'float' object cannot be interpreted as an integer
import math
print(math.factorial(-3))
実行結果
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[24], line 3
1 import math
----> 3 print(math.factorial(-3))
ValueError: factorial() not defined for negative values
最大公約数gcd
複数の値の最大公約数を取得するには「gcd 」を用います。
import math
print(math.gcd(6, 9))
print(math.gcd(6, 9, 18))
実行結果
3
3
最大公倍数lcm
複数の値の最大公倍数を取得するには「lcm」を用います。
import math
print(math.lcm(2, 3))
print(math.lcm(2, 3, 4))
実行結果
6
12
近い値かどうかを判定isclose
二つの値が近い値かどうかを判定するにはiscloseを用います。
import math
print(math.isclose(2, 2.1))
print(math.isclose(2, 2.3))
実行結果
False
False
相対許容差を指定するには「rel_tol」のオプションを追加します。
例えば許容差を5%に設定する場合は「rel_tol=0.05」とします。
デフォルト値は1e-9です。
import math
print(math.isclose(2, 2.1, rel_tol=0.05))
print(math.isclose(2, 2.3, rel_tol=0.05))
実行結果
True
False
最小の絶対許容差を指定するには「abs_tol」のオプションを追加します。
import math
print(math.isclose(2, 2.5, abs_tol=1))
print(math.isclose(2, 3.1, abs_tol=1))
実行結果
True
False
欠損値nanかどうかを判定isnan
欠損値nanかどうかを判定するには「isnan」を用います。
これはnumpyの「isnan」と同じ結果を返します。
import math
import numpy as np
x = np.nan
y = 5
print(math.isnan(x))
print(math.isnan(y))
print(np.isnan(x))
print(np.isnan(y))
実行結果
True
False
True
False
全ての要素の積prod
全ての要素の積を計算するには「prod」を用います。
import math
print(math.prod([2, 3]))
print(math.prod([2, 3, 4]))
実行結果
6
24
対数:log、log2、log10
対数は「log(値, 底)」で計算します。
底を指定しない場合、底は自然対数の底eとなります。
import math
print(math.log(2))
print(math.log(8, 2))
実行結果
0.6931471805599453
3.0
ただし底が「2」と「10」の場合は「log2(値)」、「log10(値)」を用いることもできます。
import math
print(math.log2(8))
print(math.log10(1000))
実行結果
3.0
3.0
指数pow
指数は「pow(値, 乗数)」を用います。
ちなみにmathモジュールを用いなくても指数の計算ができます。
import math
print(math.pow(2,3))
print(pow(2,3))
実行結果
8.0
8
mathモジュールを用いた場合はfloat値として、用いていない場合はint値として返ってくることに注意です。
平方根sqrt
平方根を計算するには「sqrt」を用います。
import math
print(math.sqrt(4))
実行結果
2.0
numpynのsqrtでも計算できます。
import numpy as np
print(np.sqrt(4))
実行結果
2.0
ラジアン→角度degrees、角度→ラジアンradians
ラジアンを角度に変換するには「degrees」、角度をラジアンに変換するには「radians」を使います。
import math
print(math.degrees(math.pi/2))
print(math.radians(90))
実行結果
90.0
1.5707963267948966
三角関数sin, cos, tan、逆三角関数asin, acos, atan
三角関数はそれぞれ「sin」、「cos」、「tan」を用います。
この際、角度はラジアンで指定します。
import math
print(math.degrees(math.pi/4))
print(math.sin(math.pi/4))
print(math.cos(math.pi/4))
print(math.tan(math.pi/4))
実行結果
45.0
0.7071067811865475
0.7071067811865476
0.9999999999999999
逆三角関数は「asin」、「acos」、「atan」を用い、こちらも角度はラジアンで指定します。
import math
print(math.degrees(math.pi/4))
print(math.asin(math.pi/4))
print(math.acos(math.pi/4))
print(math.atan(math.pi/4))
実行結果
45.0
0.9033391107665127
0.6674572160283838
0.6657737500283538
次回はnumpyで値が近いかどうかを判定するiscloseを紹介します。
ではでは今回はこんな感じで。
コメント