手計算では難しい「対数関数」は、Pythonで簡単に演算することができます。
本記事では、そんなPython基礎となる対数関数について、詳しくご説明します。
対数関数
対数関数(logarithm function)とは、指数関数の逆関数として定義されます。
1ではない正数\(a\)および正数\(b\)に対して、下式の指数関数を考えます。
\(b=a^{x}\)
上式を満たす実数\(x\)は、\(a\)を底とする\(b\)の対数として、下式で定義されます。
\(x=\log _{a}b\)
また下式で表される関数が、\(a\)を底とする対数関数です。
\(f\left( x\right) =\log _{a}x\)
以下に、Pythonを使用した対数関数の演算方法をご紹介します。
math.log()
mathモジュールのmath.log()を使用すると、第一引数に指定した真数の対数を演算することができます。
第二引数には底を指定できますが、省略した場合、ネイピア数\(e\)が底とされます。
以下に使用例をご紹介します。
#input
import math
x1 = math.log(2,2)
x2 = math.log(math.e)
x3 = math.log(15)
print("log(2,2) = {}".format(x1))
print("log(math.e) = {}".format(x2))
print("log(15) = {}".format(x3))
#output
log(2,2) = 1.0
log(math.e) = 1.0
log(15) = 2.70805020110221
math.log2()
mathモジュールのmath.log2()を使用すると、指定した真数の2を底とした対数を演算することができます。
#input
import math
x1 = math.log2(1)
x2 = math.log2(8)
x3 = math.log2(32)
print("log2(1) = {}".format(x1))
print("log2(8) = {}".format(x2))
print("log2(32) = {}".format(x3))
#output
log2(1) = 0.0
log2(8) = 3.0
log2(32) = 5.0
math.log10()
mathモジュールのmath.log10()を使用すると、指定した真数の常用対数を演算することができます。
#input
import math
x1 = math.log10(1)
x2 = math.log10(10)
x3 = math.log10(100)
print("log10(1) = {}".format(x1))
print("log10(10) = {}".format(x2))
print("log10(100) = {}".format(x3))
#output
log10(1) = 0.0
log10(10) = 1.0
log10(100) = 2.0
math.log1p()
mathモジュールのmath.log1p()を使用すると、「指定した真数+1」のネイピア数\(e\)を底とした対数を演算することができます。
#input
import math
x1 = math.log(2)
x2 = math.log1p(1)
print("log(2) = {}".format(x1))
print("log1p(1) = {}".format(x2))
#output
log(2) = 0.6931471805599453
log1p(1) = 0.6931471805599453
cmath.log()
cmathモジュールのcmath.log()を使用すると、math.log()に加えて、第一引数に負数や複素数を指定することができます。
math.log()と同様、第二引数には底を指定できますが、省略した場合、ネイピア数\(e\)が底とされます。
#input
import cmath
x1 = cmath.log(10)
x2 = cmath.log(-10)
x3 = cmath.log(1+3j)
print("log(10) = {}".format(x1))
print("log(-10) = {}".format(x2))
print("log(1+3j) = {}".format(x3))
#output
log(10) = (2.302585092994046+0j)
log(-10) = (2.302585092994046+3.141592653589793j)
log(1+3j) = (1.151292546497023+1.2490457723982544j)
cmath.log10()
cmathモジュールのcmath.log10()を使用すると、math.log10()に加えて、負数や複素数を指定し、常用対数を計算することができます。
#input
import cmath
x1 = cmath.log10(10)
x2 = cmath.log10(-10)
x3 = cmath.log10(1+3j)
print("log10(10) = {}".format(x1))
print("log10(-10) = {}".format(x2))
print("log10(1+3j) = {}".format(x3))
#output
log10(10) = (1+0j)
log10(-10) = (1+1.3643763538418412j)
log10(1+3j) = (0.5+0.5424536865971469j)
numpy.log()
NumPyモジュールのnumpy.log()を使用すると、ネイピア数\(e\)を底とした対数を配列型で計算することができます。
#input
import numpy as np
A = np.array([np.e, -np.e, 10])
x = np.log(A)
print(x)
#output
[1. 0.69314718 2.30258509]
numpy.log()を使用して、対数関数\(f\left( x\right) =\log x\)をグラフ化してみます。
#input
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
A = fig.add_subplot(111)
A.grid(color="k",linestyle="dotted")
A.set_title("f(x)=log(x)", fontsize = 16)
A.set_xlabel("x", fontsize = 14)
A.set_ylabel("f(x)", fontsize = 14)
x = np.arange(0.1,5,0.1)
y = np.log(x)
A.plot(x,y,color="deeppink")
plt.show()
numpy.log2()
NumPyモジュールのnumpy.log2()を使用すると、2を底とした対数を配列型で計算することができます。
#input
import numpy as np
A = np.array([0.5, 2, 32])
x = np.log2(A)
print(x)
#output
[-1. 1. 5.]
numpy.log10()
NumPyモジュールのnumpy.log10()を使用すると、常用対数を配列型で計算することができます。
#input
import numpy as np
A = np.array([0.1, 10, 1000])
x = np.log10(A)
print(x)
#output
[-1. 1. 3.]
numpy.log1p()
NumPyモジュールのnumpy.log1p()を使用すると、「指定した真数+1」のネイピア数\(e\)を底とした対数を配列型で計算することができます。
#input
import numpy as np
A = np.array([2, 5, 9])
B = np.array([1, 4, 8])
x = np.log(A)
y = np.log1p(B)
print(x)
print(y)
#output
[0.69314718 1.60943791 2.19722458]
[0.69314718 1.60943791 2.19722458]
sympy.log()
SymPyモジュールのsympy.log()を使用すると、第一引数に指定した真数の対数を出力できます。
第二引数には底を指定できますが、省略した場合、ネイピア数\(e\)が底とされます。
#input
import sympy
sympy.var("x y")
A = sympy.log(x+y,10)
print(A)
#output
log(x + y)/log(10)
まとめ
この記事では、Python基礎となる指数関数について、ご説明しました。
本記事を参考に、ぜひ演算を試してみてください。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!