[python]対数を取る関数math.log()と、対数/自然対数とは何かを直感的に理解する

カテゴリ: python

pythonで対数を取る関数math.log()の使い方と、対数自体の概念のおさらいです。

特に対数は久しぶりに使うとなんの事だったか忘れてしまうので、順を追って分かりやすく説明しています。

対数を取る

pythonで対数の計算を行いたいときはmath.log()関数を使います。
math.log()関数を使うためには「import math」でパッケージのインポートが必要です

下記の例では、10を底にしたときに100の対数が何かを求めており、実行すると2.0が出力されます。

import math
print(math.log(100, 10))


# [出力]
# 2.0

このようにpythonのmath.log()関数では、第一引数へ求めたい数を指定し、第二引数に底を指定します。

対数の底とは何か?

log計算というのは、ざっくりいうと桁数を求める行為です。
10を底にした場合は、入力が10倍になるごとに戻り値は+1されていく仕組みです。

import math

print(math.log(1, 10))
print(math.log(10, 10))
print(math.log(100, 10))
print(math.log(1000, 10))


# [出力]
# 0.0
# 1.0
# 2.0
# 2.9999999999999996

ここで、math.log(1000, 10)の出力が3ではなく2.999...になっていますが、これはlog()関数の性質ではなくpythonが小数点を近似値計算していることによる計算誤差が原因です。

pythonによる指数表現

ところで、pythonでは**演算子というものがあり、これを使うことで以下のように指数計算が行えます。

指数計算というのは、例えば10の3乗というのは10*10*10と同じことを意味しており、乗数の部分でその数を何回掛けるかを指定します。人が大きな数字を説明するときに「1の後に0が10個続く大きな数字」といった表現を使うことがありますが、これと同じ考え方です。

import math

print(10 ** 0)
print(10 ** 1)
print(10 ** 2)
print(10 ** 3)  # 10の3乗を求める


# [出力]
# 1
# 10
# 100
# 1000

logと指数の関係

先ほど説明した指数とlog()関数を組み合わせると、以下のように書くことができます

import math

print(math.log(10 ** 0, 10))
print(math.log(10 ** 1, 10))
print(math.log(10 ** 2, 10))
print(math.log(10 ** 3, 10))

# [出力]
# 0.0
# 1.0
# 2.0
# 2.9999999999999996

出力をみると、指数の部分の数字がそのまま結果に出ていることがわかります。

指数計算したものを対数計算すると元に戻るという関係で、これを難しくいうと「指数関数は対数関数の逆関数である」と言ったりもします。

自然対数を使う

数学には自然対数という(初めて聞く人にとっては)謎な数字があり、これはpythonではmath.eで取得できます。

import math

print(math.e)


# [出力]
# 2.718281828459045

自然対数は,上記の実行結果からもわかるように2.7ぐらいの値です

対数の底を10から自然対数(e)に変更してlog()計算する

これまでlog()の底を10にしていましたが、自然対数に変更してみます。

下記の結果は、これまでみてきた流れで推測できるかと思いますが、それぞれ0,1,2,3になります。

import math

print(math.log(math.e ** 0, math.e))
print(math.log(math.e ** 1, math.e))
print(math.log(math.e ** 2, math.e))
print(math.log(math.e ** 3, math.e))


# [出力]
# 0.0
# 1.0
# 2.0
# 2.9999999999999996

log()関数の第二引数を省略する

実は、pythonのlog関数は第二引数を省略することができ、省略した場合は自然対数を指定したとみなします。
このため、下記のプログラム1つ前の実験と同じ結果になります。

import math

print(math.log(math.e ** 0))
print(math.log(math.e ** 1))
print(math.log(math.e ** 2))
print(math.log(math.e ** 3))


# [出力]
# 0.0
# 1.0
# 2.0
# 2.9999999999999996

まとめ

これまで学んだことをまとめると、以下の通りです。

  • pythonで対数を計算するにはimport mathが必要
  • pythonで対数はmagh.log()で計算できる
  • 対数計算というのは、桁数を求める処理のようなもの
  • 指数と対数はそれぞれ反対の関係になっている
  • math.log()は第二引数を省略でき、省略時は自然対数が底と見なされる

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

2 thoughts on “[python]対数を取る関数math.log()と、対数/自然対数とは何かを直感的に理解する

    1. コメントありがとうございます!
      確かに間違っていましたので、記事の内容修正しました。

コメントを残す

メールアドレスが公開されることはありません。