pythonで対数を扱う方法4選|math, cmath, sympy, numpy

pyhtonで対数を扱う4つの方法

本記事ではpythonで対数を扱う方法を4つ紹介します。

この記事を読むことでpythonで対数を扱えるようになります。

目次

pythonで対数を扱う4つの方法

pythonで対数を扱う4つの方法

pythonで対数を扱うには次の4つの方法があります。

各方法についてコードを示しながら紹介していきます。

本記事のコードは全てグーグルコラボラトリーで動作を確認しています。

対数を扱う: math

対数を扱う: 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

複素数を含む対数を扱う: 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

sympyは記号数学用のpythonライブラリです。sympyを使用することで、xやyなどの記号を含む方程式を解くことが可能です。

次の対数方程式を解いてみましょう。

log2(x+1)=2+log2x
log9x = log3 (x-2)

STEP
方程式を=0の形に直す

始めに方程式を=0の形に変形させましょう。

log2(x+1) – 2 – log2x = 0
log9x – log3 (x-2) =0

STEP
sympyライブラリをインポートする

sympyは外部ライブラリです。

開発環境にpympyをインストールしていない場合はインストールが必要です。

sympyをインポートします。

import sympy
STEP
対数方程式を解く

それでは対数関数を解いていきます。

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をインポートしましょう。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を独学する方法について紹介しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次