本記事ではpythonで対数を扱う方法を4つ紹介します。
この記事を読むことでpythonで対数を扱えるようになります。
pythonで対数を扱う4つの方法
pythonで対数を扱うには次の4つの方法があります。
各方法についてコードを示しながら紹介していきます。
本記事のコードは全てグーグルコラボラトリーで動作を確認しています。
対数を扱う: math
mathライブラリはpythonの標準ライブラリで、数学を扱う際に便利です。
始めにmathライブラリをインポートすることで使用できます。
import math
math.log()
math.log(x, base)は、log(x)/log(base) として求められる base を底とした x の対数を返します。
baseを指定しないと自然対数、baseに10を指定すれば常用対数、2を指定すれば二進対数の計算も可能です。
print(math.log(3))
print(math.log(4,4))
print(math.log(10, 10))
print(math.log(2, 2))
出力:
1.0986122886681098
1.0
1.0
1.0
math.log1p()
1+x の自然対数を返す関数です。 math.log1p()を使うことで、ゼロに近い x に対して正確な値が計算されます。
print(math.log(1.00000001))
print(math.log1p(0.00000001))
出力:
9.999999889225291e-09
9.999999950000001e-09
math.log2()
底が2の対数(二進対数)を返します。一般にmath.log(x, 2)の計算結果に比べ正確な値を返します。
print(math.log(0.0000001, 2))
print(math.log2(0.0000001))
出力:
-23.25349666421154
-23.253496664211536
math.log10()
底が10の対数(常用対数)を返す関数です。一般にmath.log(x, 10)の計算結果に比べ正確な値を返します。
print(math.log(0.0000000000001, 10))
print(math.log10(0.0000000000001))
出力:
-12.999999999999998
-13.0
複素数を含む対数を扱う: cmath
pyhtonでは複素数の計算が可能です。しかし、iではなくjで記述する点に注意しましょう。
3 + 2i
出力:
SyntaxError: invalid syntax
3 + 2j
出力:
(3+2j)
cmathライブラリをインポートすることで、複素数を含む数学を扱うことができるようになります。
import cmath
cmath.log()
cmath.log(x, base)はlog(x)/log(base) として求められる base を底とした x の対数を返します。
baseを指定しないとxに対する自然対数を返します。
print(cmath.log(3))
print(cmath.log(3,3))
print(cmath.log(2j))
print(cmath.log(2j, 2j))
出力:
(1.0986122886681098+0j)
(1+0j)
(0.6931471805599453+1.5707963267948966j)
(1+0j)
cmath.log10()
cmath.log10()はxに対する常用対数を返します。
print(cmath.log10(3+2j))
print(cmath.log(3+2j,10))
出力:
(0.5569716761534184+0.255366286065454j)
(0.5569716761534184+0.255366286065454j)
対数が含まれる方程式を解く: sympy
sympyは記号数学用のpythonライブラリです。sympyを使用することで、xやyなどの記号を含む方程式を解くことが可能です。
次の対数方程式を解いてみましょう。
log2(x+1)=2+log2x
log9x = log3 (x-2)
始めに方程式を=0の形に変形させましょう。
log2(x+1) – 2 – log2x = 0
log9x – log3 (x-2) =0
sympyは外部ライブラリです。
開発環境にpympyをインストールしていない場合はインストールが必要です。
sympyをインポートします。
import sympy
それでは対数関数を解いていきます。
xやyなどの記号はsympy.Symbol()で宣言します。
対数の表現はsympy.log(x, base)です。
記述した方程式をsympy.solve()で囲むことで、方程式の解を求めることができます。
# log2(x+1)-2-log2x=0を解く
x = sympy.Symbol('x')
sympy.solve(sympy.log(x+1,2)-2-sympy.log(x,2))
出力:
[1/3]
# log9x - log3(x-2) = 0を解く
x = sympy.Symbol('x')
sympy.solve(sympy.log(x,9)-sympy.log(x-2,3))
出力:
[4]
対数を含む行列を扱う: numpy
numpyは行列の計算を簡単にできる外部ライブラリです。 開発環境にnumpyをインストールすることで使用できます。
始めにnumpyをインポートしましょう。numpyはnpと略して使用することが多いです。
import numpy as np
numpy.log()
numpy.log()はカッコ内に行列を指定することで、行列内の各要素に対する自然対数を返します。
ちなみにnumpy.eでネイピア数eを入力できます。
np.log([np.e, 1, 10, 2])
出力:
array([1. , 0. , 2.30258509, 0.69314718])
numpy.log1p()
numpy.log1pは行列内の各要素に対するlog(1+x)を返します。
np.log1p([np.e, 1, 10, 2])
出力:
array([1.31326169, 0.69314718, 2.39789527, 1.09861229])
numpy.log10()
numpy.log10()は行列内の各要素に対する常用対数を返します。
np.log10([np.e, 1, 10, 2])
出力:
array([0.43429448, 0. , 1. , 0.30103 ])
numpy.log2()
numpy.log2()は行列内の各要素に対する二進対数を返します。
np.log2([np.e, 1, 10, 2])
出力:
array([1.44269504, 0. , 3.32192809, 1. ])
まとめ
今回はpythonで対数を扱う方法を4つ紹介しました。
特別な理由がなければ、math.log()を使用すれば問題ありません。
この記事を読んでpythonにより興味を持った人は次の記事もぜひご覧ください。
pythonを独学する方法について紹介しています。
コメント